我试图以下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)
这是未定义的行为。 – sgarizvi 2013-02-16 15:40:12
它似乎工作,就是这样。你违反规定。 – 2013-02-16 15:41:59
好吧,没有提供第一组输出为20的参考连接。 – user2078670 2013-02-16 15:54:46