Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+的未定义行为+;程序_C++_C++14 - Fatal编程技术网

C++ c+的未定义行为+;程序

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++) {

我在下面列出了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++)
{
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您将联机编译器的链接与用户混淆:)