【发布时间】:2016-10-25 07:05:00
【问题描述】:
#include <iostream>
using namespace std;
int main()
{
int a=50;
int b=50;
int *ptr = &b;
ptr++;
*ptr = 40;
cout<<"a= "<<a<<" b= "<<b<<endl;
cout<<"address a "<<&a<<" address b= "<<&b<<endl;
return 0;
}
上面的代码打印:
a= 50 b= 50
address a 0x7ffdd7b1b710 address b= 0x7ffdd7b1b714
而当我从上面的代码中删除以下行时
cout<<"address a "<<&a<<" address b= "<<&b<<endl;
我得到的输出为
a= 40 b= 50
我的理解是堆栈向下增长,所以第二个答案似乎是正确的。我不明白为什么 print 语句会弄乱内存布局。
编辑:
我忘了说,我使用的是 64 位 x86 机器,操作系统为 ubuntu 14.04 和 gcc 版本 4.8.4
【问题讨论】:
-
这只是未定义的行为。
-
在 VS2005 中不是这样。我在有和没有
cout<<"address a " << ..行的情况下运行上面的代码,结果在两种情况下都是 a=50, b=50。
标签: c++ memory undefined-behavior