【发布时间】:2016-03-29 12:47:08
【问题描述】:
我认为删除指针指向的内存应该用零覆盖。(不确定) 但它仍然指向 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;
【问题讨论】:
-
删除指针不会改变它指向的地址。它只是释放曾经分配的内存,因此可以再次使用它。此外,取消引用已删除的指针是未定义的行为。
-
您将信用卡号写在一张纸上。你把它揉成一团,扔进废纸篓。别人把它拿出来,把纸弄皱,然后读你的信用卡号。这是怎么回事? (不是一个完美的类比,部分原因是在 C++ 的情况下,通常甚至不会发生任何皱缩。)
-
*p在delete p之后是未定义的行为。它可能会给你一次有意义的价值,但下次你尝试你的电脑时可能会爆炸。只是不要这样做。 -
哈哈好的,谢谢大家。我再也不会这样做了。但还有一件事。那么它如何检测内存是否被删除并允许使用?否则除了执行
delete关键字之外,其他都和以前一样
标签: c++