以前在使用new来开辟的内存区域后,就只用delete来进行内存回收,其实这还不完全。仅仅将其删去,但指向这块内存区域的指针还存在(成为野指针了,书面上称为悬挂指针-dangling
pointer),当在后面不小心再次删去时就会报错了。所以在delete后,还要将其赋值为NULL。
而且在删除指针前应该判断其是否为空,这样就会避免多次删除一个指针而报错。如下例:
char * pstrFilePath;
...
if(pstrFilePath != NULL)
{
delete pstrFilePath;
//如果pstrFilePath为数组,则delete []pstrFilePath;
pstrFilePath = NULL;
}
而且野指针常常会导致系统出现内存泄漏,尤其是在一个涉及到大块内存调度和频繁读写内存的进程中。其实解决野指针还有一个好办法--使用引用计数器。引用计数器是一个对引用字符串在内存中的字符串数据的指针进行计数的整数。每当一个新指针指向这个字符串,计数器就加一,相反每释放一次就减一,当计数器为0时才真正进行内存释放。
阅读(1034) | 评论(0) | 转发(0) |