关于C语言野指针的问题
野指针产生的原因:
由于指针变量和它所指的内存空间是两个不同的概念。当释放指针所指的内存空间时,指针所指的内存空间被清空,但是指针的指向并没有改变,就形成了野指针。如果第二次通过 if (p != NULL) { free(p); } 这样的语句来释放指针申请的内存空间,会造成程序中断。
如图:
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *p = NULL;
p = (char *)malloc(100);
strcpy(p, "abcdefg");
printf("%s\n",p);
//释放内存
if (p != NULL)
{
free(p);
//如果不将p指向NULL,会形成野指针
//p = NULL;
}
//这里打印出的将是乱码,因为原来的数据已被free掉
printf("%s\n",p);
//如果再次释放内存,程序可能会中断
if (p != NULL)
{
free(p);
}
return 0;
}