微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回局部变量和动态创建的变量的地址

如何解决返回局部变量和动态创建的变量的地址

代码 1:

ccc

代码 2:

int *g(){
    int *p;
    p=(int *)malloc(sizeof(int));
    *p=10;
    return p;
}

输出

代码 2 ----> [警告] 函数返回局部变量的地址 [-Wreturn-local-addr] 仍然给出正确的输出(10)

代码 1 ----> 工作正常。没有警告,没有错误

我有很多问题。

  1. 代码 1 也返回了局部变量的地址,为什么没有警告?

  2. 代码 2 给出警告,我明白,我正在返回一个局部变量的地址。当函数 g 执行完成时,栈记录被弹出,因此存在悬空指针的情况。尽管如此,当我运行它时,为什么它会给出正确的输出(10)?

  3. 代码 1 没有警告,没有错误。但这是一个好习惯吗?

P.S 两种场景的主要功能相同。

int *g(){
    int p=10;
    return &p;
}

解决方法

  1. 代码 1 不是返回局部变量的地址,而是返回在堆上分配的区域的地址,所以没问题。
  2. 未定义的行为被调用,你偶然得到了结果。
  3. 函数 g 有两个问题:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。