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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-06-29
  • 2022-12-23
  • 2021-12-05
  • 2021-04-14
猜你喜欢
  • 2021-12-01
  • 2022-12-23
  • 2021-11-18
  • 2021-08-04
  • 2021-07-24
  • 2021-08-15
  • 2022-12-23
相关资源
相似解决方案