请参阅以下代码:
#include<iostream>
using namespace std;
int main()
{
int a=10;
int *p=&a;
*(p+1)=6;
cout<<*(p+1);
}
上面的代码不起作用。但是,下面的一段代码(分配给显式内存地址)确实有效:
#include<iostream>
using namespace std;
int main()
{
int *p=(int *)0x28fefc;
*(p+1)=6;
cout<<*(p+1);
}
为什么其中一种方法有效而另一种无效? 我在第二个计算机中使用了计算机的内存地址。这个地址可能在其他机器上不起作用。
答案 0 :(得分:4)
这些都是未定义的行为。您正在尝试修改未分配的内存。第二个更不安全,因为你假设每次都会将a
分配给该地址,这绝对不是一个安全的假设。