野指针
Posted fengxing999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了野指针相关的知识,希望对你有一定的参考价值。
野指针就是指向无效地址的指针。 一般有三种情况导致野指针问题:
1 引用未初始化的指针变量
# include <stdio.h>
int main(void)
{
int i = 3;
int *j;
*j = i; //指针j还未初始化,即指针j指向0XCCCCCCCC内存空间,该地址应用程序无权访问,使用 *j试图往这个内存空间中写数据时,程序运行后会报错。
return 0;
}
2 引用被赋值为NULL的指针变量
# include <stdio.h>
int main(void)
{
int i = 3;
int *j = NULL; //NULL指向内存中地址为0的空间 0x00000000。
*j = i; //0x00000000空间是不可用的,往该内存空间写数据也是非法的,运行会报错。
return 0;
}
3 free指针后未把指针置成NULL
int main(void)
{
char *p;
p = (char*)malloc(20);
strcpy(p, "hello");
printf("%s
", p);
if(p != NULL)
{
free(p); //这儿已经释放了p指向的内存空间。但是p指向的内存地址还没有变,这儿可能会存放别的有用数据。
}
free(p); //p指向的内存地址还没有变,再次释放会报错。
return 0;
}
运行结果如图:
PS: free释放指针指向的内存空间后,一定要把指针置为NULL。代码如下:
int main(void)
{
char *p;
p = (char*)malloc(20);
strcpy(p, "hello");
printf("%s
", p);
if(p != NULL)
{
free(p);
p = NULL; //free释放指针指向的内存空间后,一定要把指针置为NULL。
}
free(p);
return 0;
}
以上是关于野指针的主要内容,如果未能解决你的问题,请参考以下文章