C++指针悬挂-笔记

别怕摔跤,总会摔的~~~

感谢:http://www.cnblogs.com/henryzc/articles/294349.html

1.  char * p = new char[10];  //给p分配一块有10个字节的内存,并把这块内存的开始地址放在p中

2. 所谓指针悬挂是指 指针指向了一块没有分配给用户使用的内存

3. 良好的编程习惯是:首先给指针初始化为一个0值(注意我这里没有用空值,因为空值这个术语含义不明),然后在使用的时候检查这个指针

char * g_pBuffer =(char*)0;
delete [] g_pBuffer;

4. 指针拷贝后删除了指针:如果在使用指针过程中对指针进行了拷贝,然后其中一个拷贝被删除,则另外一个拷贝就成了悬挂指针

char * g_pBuffer =(char*)0;
g_pBuffer = pBuffer;
delete []pBuffer;              //pBuffer立刻被删除,而此时g_pBuffer还保存这个指针的一个备份,这个备份就成为一个 悬挂的指针

 5.避免指针悬挂的要点:

  • 不保存指针的拷贝,如果要保存指针指向的内容,则新分配一块大小相等的内存,把其内容完全拷贝过去。如果确实不得不保存拷贝,必须小心关注每个拷贝的使用情况,一旦一个拷贝进行了删除,则其他拷贝必须立刻放弃使用。
  • 包含指针的结构和类必须实现拷贝构造函数和operator=运算符,如果不愿意实现,对其赋值和构造必须针对每个成员变量进行特殊处理。
  • 指针使用完毕并删除后,应该把指针变量的值设置为0

 

posted @ 2016-04-09 21:33  M_Lion  阅读(261)  评论(0编辑  收藏  举报