suk*_*996 -1 c pointers dynamic-memory-allocation dangling-pointer
代码 1:
int *g(){
int *p;
p=(int *)malloc(sizeof(int));
*p=10;
return p;
}
Run Code Online (Sandbox Code Playgroud)
代码 2:
int *g(){
int p=10;
return &p;
}
Run Code Online (Sandbox Code Playgroud)
输出:
代码 2 ----> [警告] 函数返回局部变量的地址 [-Wreturn-local-addr] 仍然给出正确的输出(10)
代码 1 ----> 工作正常。没有警告,没有错误。
我有很多问题。
代码 1 也返回了一个局部变量的地址,那么为什么没有警告呢?
代码 2 给出了警告,我明白,我正在返回一个局部变量的地址。当函数 g 执行完成时,栈记录被弹出,因此存在悬空指针的情况。尽管如此,当我运行它时,为什么它会给出正确的输出(10)?
代码 1 没有警告,没有错误。但这是一个好习惯吗?
PS 两种场景的主要功能相同。
int main()
{
int *v=g();
printf("%d",*v);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
g有两个问题:malloc()你应该这样做的结果。malloc() 被认为是一种不好的做法。