举个例子:你向系统给大哥申请了一块内存空间,这块内存空间被标记属于你,然后由指针带你找到内存空间的地址,你在内存空间里存放了数据,后来你想释放内存空间,于是指针又带你找到原来那个内存空间的地址,系统当场就把这块内存空间拆了(此时你的数据还留着),可你也没办法对你的数据进行操作,只能看着你的数据等着被其他的数据给其他程序占用和覆盖。
这个时候指针如果没有置空(= 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)
暂无评论