【发布时间】:2013-02-16 15:39:46
【问题描述】:
我尝试了下面的 C++ 代码
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
int &a = *p;
delete p;
a = 20;
cout<<a<<" ";
cout<<*p;
return 0;
}
得到的输出为:20 20
我认为这可能会由于访问已释放的内存或一些垃圾而导致运行时错误。可能我得到了这个输出,因为程序释放的内存位置可能还没有被使用,所以仍然保留旧值。
所以我认为如果我不使用引用也应该发生这种情况
#include <iostream>
using namespace std;
int main()
{
int *p = new int;
*p = 10;
// int &a = *p;
delete p;
// a = 20;
// cout<<a;
cout<<*p;
return 0;
}
但在这种情况下,我得到的输出为 0(通过多次运行检查)。 Reference 是否与不同的输出有关?
编译器:gcc 版本 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1)
【问题讨论】:
-
这是未定义的行为。
-
它似乎工作,就是这样。你违反了规则。
-
好的,没有将第一组输出设为 20 的参考连接。
标签: c++