C野指针简单理解
xk2wm 2019-07-08 05:21:35 首先,野指针不能理解为指向NULL的指针。在编程中,都会对指针变量进行if判断,一旦发现了是NULL都会立即报错或者返回。因此NULL指针危险性不会很大。
野指针,应该理解为指向一个不合法地址的指针,那么也就把问题转变为何为不合法地址了。有两种情况:
1.没有初始化指针变量
2.通过在堆区初始化了指针变量,在释放了堆区内存后,不再理会指针变量了
具体来说,第一种情况是因为没有初始化的指针变量的缺省值是乱七八糟随便给的,一个这样的地址就是不合法的地址,因此要对指针变量赋初始值。
第二种情况,比如int *p=(int*)malloc(sizeof(int));
free(p);这种操作,指针变量p的确赋初始值了,问题是如果free以后就不管p指针了,释放的只是malloc的内存,而p所指向的那个地址这一点没有变,因为我们知道指针就只是指向一个地址的,free掉了地址里面的内容,但是地址仍然存在,只是此时的地址已经没有内容,也就是没有意义了,那也就是说此时指针变量p指向了一个不合法的地址。