标签:c内存 技术 程序 free 不可用 har bubuko int str
野指针就是指向无效地址的指针。 一般有三种情况导致野指针问题:
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 \n", 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 \n", p);
if(p != NULL)
{
free(p);
p = NULL; //free释放指针指向的内存空间后,一定要把指针置为NULL。
}
free(p);
return 0;
}
标签:c内存 技术 程序 free 不可用 har bubuko int str
原文地址:https://www.cnblogs.com/fengxing999/p/10233865.html