C++ c+的未定义行为+;程序
我在下面列出了2个代码 代码1:C++ c+的未定义行为+;程序,c++,c++14,C++,C++14,我在下面列出了2个代码 代码1: int main() { int z=0 ,a[100]; for(int i=10;i<=30;i++) { if(palindrome(i)) a[++z]=i; } cout<<"value of z = "<<z<<endl; } int main() { int z=0 ,a[100]; for(int i=10;i<=30;i++) {
int main()
{
int z=0 ,a[100];
for(int i=10;i<=30;i++)
{
if(palindrome(i))
a[++z]=i;
}
cout<<"value of z = "<<z<<endl;
}
int main()
{
int z=0 ,a[100];
for(int i=10;i<=30;i++)
{
if(palindrome(i))
a[++z]=i;
cout<<z<<endl; // JUST ADDED THIS EXTRA LINE
}
cout<<"value of z = "<<z<<endl;
}
0
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
value of z = 2
代码1的输出:
z=0的值
代码2的输出:
int main()
{
int z=0 ,a[100];
for(int i=10;i<=30;i++)
{
if(palindrome(i))
a[++z]=i;
}
cout<<"value of z = "<<z<<endl;
}
int main()
{
int z=0 ,a[100];
for(int i=10;i<=30;i++)
{
if(palindrome(i))
a[++z]=i;
cout<<z<<endl; // JUST ADDED THIS EXTRA LINE
}
cout<<"value of z = "<<z<<endl;
}
0
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
value of z = 2
有人能解释为什么添加
cout代码会导致未定义的行为:
- 未初始化时使用了
rev
palindrome
可以在不执行return
语句的情况下完成,调用方使用返回值
cout
语句影响行为的原因可能是,当编译器读取未初始化的存储时,它恰好位于与cout
调用使用的内存相同的内存位置。(您不能依赖此)1/您的回文
函数中的rev
变量未初始化。2/在回文
函数的末尾,如果rev==n1
未定义返回值。这甚至没有为我编译的叮当声。intrev代码>声明rev
,但不初始化它。要初始化为0,请写入int rev{}代码>我建议您使用MSVC、gcc或clang等现代编译器,并打开所有警告(并阅读+理解它们)。这将很容易捕获此类编程错误。阅读了解更多信息。17:1:警告:控件到达非无效函数的结尾[-Wreturn type]
@SMaheshKumar您将联机编译器的链接与用户混淆:)