Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么指向已释放内存的引用有效? 我尝试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++ - Fatal编程技术网 你是在取消发布的内存。这是一个未定义的行为。不能保证结果会是什么。只是碰巧,你的编译器、操作系统和C++库的组合,程序似乎起作用了。,c++,C++" /> 你是在取消发布的内存。这是一个未定义的行为。不能保证结果会是什么。只是碰巧,你的编译器、操作系统和C++库的组合,程序似乎起作用了。,c++,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++代码< /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;
}