如何解决返回局部变量和动态创建的变量的地址
代码 1:
ccc
代码 2:
int *g(){
int *p;
p=(int *)malloc(sizeof(int));
*p=10;
return p;
}
输出:
代码 2 ----> [警告] 函数返回局部变量的地址 [-Wreturn-local-addr] 仍然给出正确的输出(10)
我有很多问题。
-
代码 1 也返回了局部变量的地址,为什么没有警告?
-
代码 2 给出警告,我明白,我正在返回一个局部变量的地址。当函数 g 执行完成时,栈记录被弹出,因此存在悬空指针的情况。尽管如此,当我运行它时,为什么它会给出正确的输出(10)?
P.S 两种场景的主要功能相同。
int *g(){
int p=10;
return &p;
}
解决方法
- 代码 1 不是返回局部变量的地址,而是返回在堆上分配的区域的地址,所以没问题。
- 未定义的行为被调用,你偶然得到了结果。
- 函数
g
有两个问题:
- 您没有检查
malloc()
的结果,而您应该这样做。 -
malloc()
is considered as a bad practice 的铸造结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。