【发布时间】:2010-10-30 00:02:07
【问题描述】:
这是来自练习的代码:
#include <iostream>
using namespace std;
int main() {
int n = 13;
int* ip = new int(n + 3);
int* ip2 = ip;
cout << *ip << endl;
delete ip;
cout << *ip2 << endl;
cout << ip << tab << ip2 << endl;
}
当分配给堆上的 int 的空间被删除时,我认为取消引用指针会产生某种内存错误。相反,它返回 0。
这是为什么?
【问题讨论】:
-
感谢回复:未定义的行为。假设内存没有被另一个程序覆盖,删除函数似乎在堆的第一个字中写入了一个空值。你觉得这很奇怪吗?
-
好的。我想我找到了归零之谜的答案:Stroustrup 说“C++ 明确允许删除的实现将左值操作数归零,我曾希望实现能够做到这一点,但这个想法似乎并没有变得流行实施者。”我尝试在“删除 ip”之后执行“删除 ip2”,这给出了双重免费错误。我想我可以检查一下程序集,看看到底发生了什么。
标签: c++ pointers heap-memory