C++ 已删除指针仍指向旧数据

C++ 已删除指针仍指向旧数据,c++,C++,我认为删除的指针指向的内存应该用零覆盖。(不确定) 但它仍然指向int值10和相同的地址。发生什么事了 int *p = new int; *p = 10; cout << *p << endl; //10 cout << p << endl; //0x7fafc3c02e80 delete p; cout << *p << endl; //10 cout << &(*p) << e

我认为删除的指针指向的内存应该用零覆盖。(不确定) 但它仍然指向int值10和相同的地址。发生什么事了

int *p = new int;
*p = 10;
cout << *p << endl; //10
cout << p << endl;  //0x7fafc3c02e80    
delete p;
cout << *p << endl; //10
cout << &(*p) << endl;  //0x7fafc3c02e80!
return 0;
int*p=新的int;
*p=10;

cout您已返回分配给空闲堆池的空间。这并不意味着有什么东西会向它写入零。这需要时间,你可能不想把时间花在这项任务上

我想有些类型可能有析构函数,可以在销毁过程中清除它们的存储,但是
int
没有

如果确实要删除数据,请在调用
delete

在你告诉系统你已经使用完内存后,继续使用它也是一个坏主意


因此,您可以选择在
delete
之后将指针设置为
NULL
,如果您确实出错并尝试使用旧指针,这将有助于导致异常。

您已返回分配给空闲堆池的空间。这并不意味着有什么东西会向它写入零。这需要时间,你可能不想把时间花在这项任务上

我想有些类型可能有析构函数,可以在销毁过程中清除它们的存储,但是
int
没有

如果确实要删除数据,请在调用
delete

在你告诉系统你已经使用完内存后,继续使用它也是一个坏主意


因此,您可以选择将指针设置为
delete
之后的
NULL
,如果您确实出错并尝试使用旧指针,这将有助于引发异常。

您没有删除指针的实际
值或其指向的值。您只是释放内存,以便“稍后”的其他指针能够指向同一点。

您没有删除指针的实际
值或其指向的值。您只是释放内存,以便“稍后”的其他指针能够指向同一点。

删除操作符释放指针指向的内存。一旦释放,它可以在任何时候重新分配,因此访问该指针将产生不可预测的结果。在您的程序中,这只是内存尚未被重新分配用于其他任何内容的情况

具体而言:

“在对象上使用delete运算符解除其内存分配。删除对象后取消引用指针的程序可能会产生不可预知的结果或崩溃。
当删除用于释放C++类对象的内存时,对象的析构函数在对象的内存被释放之前调用(如果对象有析构函数)。“< /P> < P>删除操作释放指针指向的内存。一旦释放,它可以在任何时候重新分配,因此访问该指针将产生不可预测的结果。在您的程序中,这只是内存尚未被重新分配用于其他任何内容的情况

具体而言:

“在对象上使用delete运算符解除其内存分配。删除对象后取消引用指针的程序可能会产生不可预知的结果或崩溃。
当删除用于释放C++类对象的内存时,对象的析构函数在对象的内存被释放之前调用(如果对象有析构函数)。“< /p>删除指针并没有查查它指向的地址。它只是释放曾经分配的内存,因此可以再次使用。此外,取消引用删除的指针是未定义的行为。您将信用卡号写在一张纸上。你把它揉成团扔进废纸篓。其他人把它拿出来,打开纸,读你的信用卡号码。发生什么事?(不是一个完美的类比,部分原因是因为C++的情况下通常没有任何崩溃)。删除指针的方法。<代码> *P<代码> >代码>删除P<代码>是未定义的行为。它可能会给你一次有意义的价值,但下次你尝试时,你的电脑可能会爆炸。别这么做。哈哈,好的,谢谢你们。我再也不会这样做了。但还有一件事。那么它如何检测内存是否被删除并允许使用?否则,它与以前一样,只是执行了
delete
keyword删除指针不会改变它指向的地址。它只是释放曾经分配的内存,因此可以再次使用。此外,取消引用删除的指针是未定义的行为。您将信用卡号写在一张纸上。你把它揉成团扔进废纸篓。其他人把它拿出来,打开纸,读你的信用卡号码。发生什么事?(不是一个完美的类比,部分原因是因为C++的情况下通常没有任何崩溃)。删除指针的方法。<代码> *P<代码> >代码>删除P<代码>是未定义的行为。它可能会给你一次有意义的价值,但下次你尝试时,你的电脑可能会爆炸。别这么做。哈哈,好的,谢谢你们。我再也不会这样做了。但还有一件事。那么它如何检测内存是否被删除并允许使用?否则,除了执行
delete
keyword严格地说,指针甚至不需要指向同一个点之外,一切都和以前一样。释放的内存也可以在后续分配的中间使用。@ CAD 100%正确。但对于像这样的noob问题,它需要简化,所以更不精确、更抽象的解释会更好。明显的不正确对noobs是有害的,尤其是noobs。严格地说,指针甚至不需要指向同一个点。释放的内存也可以在后续分配的中间使用。@ CAD 100%正确。但不是像这样的noob问题,noob问题需要简化,因此