您的位置:首页 > 编程语言 > C语言/C++

你所不知道的事儿--C++中delete指针后最好赋值为NULL

2015-10-23 23:00 176 查看
我们都知道,在C++中,用new声明的指针变量,都要delete。除非你完完全全使用智能指针,而不用担心内存泄露的问题。

如果你是来自C Sharp阵营,那么也许你习惯于托管代码带来的好处,垃圾内存回收机制。但是C++中,需要手动进行释放,谁分配谁释放。

首先,我要强调的一点就是delete是释放指针指向的内存,而并不是指针本身所占有的内存。 慢慢品味这句话。

我们试图写下如下的代码:

#include<iostream>
using namespace std;
int main()
{
int *p = new int(10);
delete p;
delete p;
return 0;
}


编译的时候没有错误,但是运行的时候就会崩溃。

我们试图调试程序,但令我吃惊的是无法把delete语句设上断点,求大神指导。

我们试图修改上面的代码:把delete后的指针赋值为null

#include<iostream>
using namespace std;
int main()
{
int *p = new int(10);
delete p;
p = NULL;
delete p;
return 0;
}


编译成功,运行成功。

因此,为了防止delete两次同一个指针而导致程序崩溃,请把delete后的指针赋值为NULL。

记住一点:

C++ 保证:删除 0 值的指针是安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: