下面我们再通过浅显易懂一个小例子来说明什么情况下容易出现指针悬挂。
#include "stdafx.h"
#include "iostream.h"
void main()
{
int *p1 = new int(8); // 在内存中分配一个整型数据的空间,并将首地 址给P1
int *p2 = new int(9); // 在内存中再分配一个整型数据的空间,并将首 地址给P2
cout << p1 << "/n"; // 输出P1 所指向的内存单元的地址
cout << p2 << "/n"; // 输出P2 所指向的内存单元的地址
cout << * p1 << "/n"; // 输出P1 所指向的内存单元中的内容
p1 = p2; // 将P2 赋值给P1 ,即P1 也指向了P2 所指向的内 存单元
cout << p1 << "/n";
cout << p2 << "/n"; // 通过输出可以看到P1 、P2 指向了同一个地址单 元
cout << * p1 << "/n";
cout << * p2 << "/n"; // 通过输出可以看到P1 、P2 指向同一地址单元中 的内容
delete p1; // 实际上释放的是P2 指向的内存单元,但是P1 开始所指向的地 址再也找不回
//来了 (因为我们事先没有保存),因此,无法释 放。这就产生了指针悬挂问题。
delete p2; // 再次释放P2 指向的内存单元,这将产生严重错误
}
由于指针悬挂是使用指针时容易犯而且不易察觉的错误,建议读者上机实践,避免在今后的开发中出现此类错误造成严重后果。
指针悬挂
最新推荐文章于 2023-05-03 11:52:14 发布