野指针,简单来说就是,指针指向的控件已经被释放,但是并没有让指针指向NULL;
演示代码:
#include <stdlib.h>
#include<stdio.h>
int main() {
int* p1, *p2, *p3; // 定义三个整型指针
p1 = (int*)malloc(4); // 申请4字节空间,存放整型数1
*p1 = 1;
p2 = (int*)malloc(4);//申请4字节空间,存放整型数2
*p2 = 2;
free(p1);//释放原为p1申请的空间,但未将p1赋值为NULL
p3 = (int*)malloc(4);
*p3 = 3;
printf("*p3=%d\n",*p3);//这次打印值为3
*p1 = 100;
printf("*p3=%d\n", *p3); // 我们并未对 * p3进行修改,但是这里打印的值为1OD
system("pause");
}
这里修改p1的值,p3的值却被修改的原因在于:一方面,虽然释放了p1指向的空间,但是p1没有更改指向为NULL,仍然指向原空间;另一方面,使用free()释放空间时,只是将那块空间标记为可分配,并没有还会给操作系统,如果紧接着又有新的申请就会直接将这快空间给新的指针。