未定义的行为:探索堆栈地址[C ++]

我有一个未定义的行为代码,如下所示:

此代码意外运行

int a;
*(&a+1000) = 12;
cout << *(&a+1000) << endl;

上述代码不允许我指出该地址的值。但是为什么要这样:

此代码按预期运行

int a[0];
*(&a[0]+1000) = 12;
cout << *(&a[0]+1000) << endl;

工作了吗?我已经尝试过了,这里没有问题。这种未定义的行为正在执行我所期望的。 &a+1000引用的地址与&a[0]+1000引用的地址相同。但是,为什么通过&a+1000指向价值却不能通过&a[0]+1000指向我呢?

q4623051 回答:未定义的行为:探索堆栈地址[C ++]

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2923686.html

大家都在问