如果该函数返回值是一个在函数内部定义的指针变量,则当函数调用结束时,指针变量指向的空间中的内存被系统回收,但指针变量本身的值并未发生改变,所以这个时候再对该指针操作就会造成风险。
为了避免野指针,我们可以利用动态内存分配的空间不会在函数调用结束后自动被释放,而需要手动free的特点。
int main()
{
char*ptr=NULL;
ptr=Getschar(ptr);
puts(ptr);
free(ptr);
return 0;
}
char* Getschar(char*s)
{
s=(char*)malloc(80);
scanf(%s,s);
return s;
}
所以,为了避免野指针,有几点对策
1. 不要把局部变量的地址作为函数的返回值返回
2 在定义指针时要初始化,要么使其指向NULL,要么使其指向合法内容。
3 把malloc尽量集中在函数入口处,free集中在函数出口处
4 在free完指针p指向的内存后,将p置于NULL