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 成为野指针



更多阅读可见:http://book.51cto.com/art/200811/96142.htm

posted on 2012-02-24 10:14  奋斗者  阅读(558)  评论(0)    收藏  举报

导航