Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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++ 删除参考文件_C++_Pointers_Reference - Fatal编程技术网

C++ 删除参考文件

C++ 删除参考文件,c++,pointers,reference,C++,Pointers,Reference,如果引用的基础变量被删除,引用会发生什么情况 例如,为什么下面的代码给出12作为输出,我在gcc和msvc上都进行了检查 int *x = new int(1); int& y = *x; delete x; x=NULL; int z = 12; y=z; cout<<"Y = "<<y<<endl; 访问内存已被删除的对象是未定义的行为,无论是直接访问还是通过引用访问 代码在GCC和MSVC上输出12这一事实在很大程度上是不相关的:它可以输出13

如果引用的基础变量被删除,引用会发生什么情况

例如,为什么下面的代码给出12作为输出,我在gcc和msvc上都进行了检查

int *x = new int(1);
int& y = *x;
delete x;
x=NULL;
int z = 12;
y=z;
cout<<"Y = "<<y<<endl;

访问内存已被删除的对象是未定义的行为,无论是直接访问还是通过引用访问


代码在GCC和MSVC上输出12这一事实在很大程度上是不相关的:它可以输出13、42或potato,并且仍然是标准一致的。

访问其内存已被删除的对象是未定义的行为,无论您是直接还是通过引用进行访问


代码在GCC和MSVC上输出12这一事实在很大程度上是不相关的:它可以输出13、42或potato,并且仍然符合标准。

在释放内存后,您正在访问内存。这是未定义的。未定义并不意味着程序崩溃,甚至在不同的运行中会发生不同的事情。这仅仅意味着任何事情都有可能发生

不幸的是,当您访问刚刚释放的内存时,通常不会发生什么不好的事情。这正是你所看到的行为。我怀疑,在调试模式下在MSVC中尝试同样的方法,实际上会得到不同的结果,因为它有一些模式,在这些模式中,它会在动态内存被释放后立即销毁其内容


在Linux上,尝试valgrind查找它或使用-sanitize=address编译地址sanitizer。两者都捕获此类错误。

释放内存后,您正在访问内存。这是未定义的。未定义并不意味着程序崩溃,甚至在不同的运行中会发生不同的事情。这仅仅意味着任何事情都有可能发生

不幸的是,当您访问刚刚释放的内存时,通常不会发生什么不好的事情。这正是你所看到的行为。我怀疑,在调试模式下在MSVC中尝试同样的方法,实际上会得到不同的结果,因为它有一些模式,在这些模式中,它会在动态内存被释放后立即销毁其内容


在Linux上,尝试valgrind查找它或使用-sanitize=address编译地址sanitizer。这两个人都犯了这样的错误。

行为没有定义。行为没有定义。今天早上我醒来时,我浴室的镜子上用血写着土豆。我很害怕,直到我看到这个问答。现在我知道这只是卡皮尔的时间旅行的结果!呸!土豆成就了我的一天:今天早上醒来时,我浴室的镜子上用鲜血写着土豆。我很害怕,直到我看到这个问答。现在我知道这只是卡皮尔的时间旅行的结果!呸!土豆让我很开心