new与delete必须成对使用

char  *buff = new char[reslen]; 
char *utfbuff =new char[reslen];  
....  
....  
delete  buff;  
delete  utfbuff;  


代码如上:


后果:
这段代码运行没有引发运行时错误,但是本身是存在隐患的,如果后续对*(buff+1)进行了误使用,使用了本应该释放了的内存空间。




bug分析:


对于基本类型如char int 等,delete 还是delete[]是一样的,都能够释放掉内存。
但是对于自定义的类,比如String *str =new string[10],用delete str和delete []str的区别是delete   str只对str[0]调用了析构函数,而delete   [] str则对str数组里的每
个元素都调用了析构函数,这样如果后续对*(str+1)进行了使用,就会使用到你本来打算已经释放掉的内存空间了。
也就是说,当仅仅是delete str的时候,str+1,str+2,.....等就成为了本应“在野”的“执政”指针。


正确情况如下:

 


char  *buff = new char[reslen];
char *utfbuff =new char[reslen];
....
....
delete [] buff;
delete [] utfbuff;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值