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
Coding