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;
}
f1显然有问题,它返回一个局部变量的指针,局部变量是保存在stack中的,退出函数后,局部变量就销毁了,保留其指针没有意义,因为其指向的stack空间可能被其他变量覆盖了。
f2也有问题, ptr是局部变量,未初始化,它的值是未知的,*ptr不知道指向哪里了,直接给*ptr赋值可能会覆盖重要的系统变量,这就是通常说的野指针的一种。
malloc后一定要free释放,实际工作中用的多。
真要说影响最大的,还要属第三个。



