boxmoe_header_banner_img

Hello! 欢迎来到我的博客!

加载中

文章导读

关于内存释放后指针状态


avatar
xiaoifei 2023年7月2日 933

举个例子:你向系统给大哥申请了一块内存空间,这块内存空间被标记属于你,然后由指针带你找到内存空间的地址,你在内存空间里存放了数据,后来你想释放内存空间,于是指针又带你找到原来那个内存空间的地址,系统当场就把这块内存空间拆了(此时你的数据还留着),可你也没办法对你的数据进行操作,只能看着你的数据等着被其他的数据给其他程序占用和覆盖。
这个时候指针如果没有置空(= NULL)就会成为悬空指针(dangling pointer),它非常危险,因为这块不存在的空间不再属于这个悬空指针。你不知道他所指向的地方是否会被系统分配给其他程序,这是十分不安全的

同样不安全的还有野指针(wild pointer),它指的是没有被初始化的指针,编译器一般会给予警告

范例代码

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main()
{
int *p = (int *)malloc(sizeof(int));
*p = 1;
printf("before %p\n", p);//释放前的地址和初始值
printf("before %d\n", *p);
free(p);
printf("after %p\n", p);//释放后的地址和初始值
printf("after %d\n", *p);
system("pause");
}

运行结果:



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码