为什么指向已释放内存的引用有效? 我尝试C++代码< /p> #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; } #包括 使用名称空间std; int main() { int*p=新的int; *p=10; int&a=*p; 删除p; a=20; CUT< P>你是在取消发布的内存。这是一个未定义的行为。不能保证结果会是什么。只是碰巧,你的编译器、操作系统和C++库的组合,程序似乎起作用了。
这是未定义行为的一种可能结果。取消引用为什么指向已释放内存的引用有效? 我尝试C++代码< /p> #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; } #包括 使用名称空间std; int main() { int*p=新的int; *p=10; int&a=*p; 删除p; a=20; CUT< P>你是在取消发布的内存。这是一个未定义的行为。不能保证结果会是什么。只是碰巧,你的编译器、操作系统和C++库的组合,程序似乎起作用了。,c++,C++,这是未定义行为的一种可能结果。取消引用删除-d内存是未定义行为,没有必要找出一些模式,因为切换到另一个编译器或同一编译的另一版本可能会破坏它 delete调用非基元类型的析构函数。如果您有一个类整数包装器,在销毁时清除内容,您会看到一些不同。在基元类型上,delete不会重新初始化释放的空间。因此,您可能会看到保留的原始值,但这不是保证这是一种未定义的行为。它似乎是有效的,就是这样。你违反了规则。好吧,把第一组输出设为20没有参考关系。 #include <iostream> usi
删除
-d内存是未定义行为,没有必要找出一些模式,因为切换到另一个编译器或同一编译的另一版本可能会破坏它
delete
调用非基元类型的析构函数。如果您有一个类整数
包装器,在销毁时清除内容,您会看到一些不同。在基元类型上,delete
不会重新初始化释放的空间。因此,您可能会看到保留的原始值,但这不是保证这是一种未定义的行为。它似乎是有效的,就是这样。你违反了规则。好吧,把第一组输出设为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;
}