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

《C++ primer》——ch5 表达式:new和delete

2015-04-21 22:31 281 查看
delete后指针置0

<span style="font-size:12px;">int i;
int *p = &i;
delete p;
p = 0; //p = NULL;</span>

释放指针后,p变成了未定义,但p仍然存放之前所指向对象的地址,p所指向的内存已释放,因此p不再有效。

这种情况下,p变成悬垂指针,它往往会引发程序错误,且难发现。最后一句话则保证了安全性,使得p释放后不再指向任何对象,这句话必须存在。

2.   与动态内存分配相关的三种常见错误

删除(delete)指向动态分配内存的指针失败,即内存泄漏,因而无法将该块内存还给自由存储区;
读写已删除的对象,该问题可以通过上述指针置0来检测;
对同一个内存空间delete两次:两个指针指向同一个动态创建的对象,其中一个做delete运算,将该对象的内存空间返还给自由存储区,然后接着delete第二个指针,此时自由存储区可能会被破坏。
3.
vector<string> *pvec1=new vector<string>(10) 分配一个vector容器,里面有10个string元素;
vector<string> *pvec2=new vector<string>[10] 分配一个数组,数组含有vector<string>类型10个元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: