第8题:考查函数指针
int* f1(void)
{
int x =10;
return (&x);
}
int* f2(void)
{
int* ptr;
*ptr=10;
return ptr;
}
int* f3(void)
{
int* ptr;
ptr=(int*)malloc(sizeof(int));
return ptr;
}
上面这3个函数哪一个最可能引起指针方面的问题
(a)只有f3 (b)只有f1and f3 (c) 只有f1 and f2 (d) f1 , f2 ,f3
解答:
f1显然有问题,它返回一个局部变量的指针,局部变量是保存在stack中的,退出函数后,局部变量就销毁了,保留其指针没有意义,因为其指向的stack空间可能被其他变量覆盖了
f2也有问题,ptr是局部变量,未初始化,它的值是未知的,*ptr不知道指向哪里了,直接给*ptr赋值可能会覆盖重要的系统变量,这就是通常说的野指针的一种