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

  1. 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个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值