天天看点

悬挂访问

产生

在实际使用过程中,有时会因为用户申请了空间,但是在使用完成后没有向系统发出释放的指令,导致存储空间既没有被使用也没有被回收,变为了无用单元或者会产生悬挂访问的问题。

例子

假设使用 malloc 申请了一块存储空间,有多个指针同时指向这块空间,当其中一个指针完成使命后,私自将该存储空间使用 free 释放掉,导致其他指针处于悬空状态,如果释放掉的空间被再分配后,再通过之前的指针访问,就会造成错误。数据结构中称这种访问为悬挂访问。

测试代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
int main()
{	
	int a=1,b=2; 
	int *p,*q;
	p=(int*)malloc(sizeof(int));
	*p=a;
	cout<<"正常:"<<*p<<endl;
	q=p; 
	free(q);
	cout<<"异常:"<<*p<<endl;
    return 0;
}
           

运行结果

悬挂访问