C/C++ 基础-free 和 delete 释放内存(转)
free 和 delete 把指针怎么啦?
别看 free 和 delete 的名字恶狠狠的(尤其是 delete),它们只是把指针所指的内存给
释放掉,但并没有把指针本身干掉。
用调试器跟踪示例 7-5,发现指针 p 被 free 以后其地址仍然不变(非 NULL),只是
该地址对应的内存是垃圾,p 成了“野指针” 。如果此时不把 p 设置为 NULL,会让人误
以为 p 是个合法的指针。
如果程序比较长,我们有时记不住 p 所指的内存是否已经被释放,在继续使用 p 之
前,通常会用语句 if (p != NULL)进行防错处理。很遗憾,此时 if 语句起不到防错作用,
因为即便 p 不是 NULL 指针,它也不指向合法的内存块。
char *p = (char *) malloc(100);
strcpy(p, “hello”);
// p 所指的内存被释放,但是 p 所指的地址仍然不变
free(p);
...
if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}
示例 7-5 p 成为野指针
浙公网安备 33010602011771号