打印
[开发工具]

返回本地变量的地址的情况分析

[复制链接]
494|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OKAKAKO|  楼主 | 2024-8-31 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问:下面代码有问题吗?如果有,该怎么修改?

#include<stdio.h> 

int* inc(int val)
{
  int a = val;
  a++;
  return &a;
}

int main(void)
{
    int a = 10;
    int *val = inc(a);
    printf("\n Incremented value is equal to [%d] \n", *val);

    return 0;
}


答:尽管上面的程序有时候能够正常运行,但是在“inc()”中存在严重的漏洞。
这个函数返回本地变量的地址。因为本地变量的生命周期就是“inc()”的生命周期,
所以在inc结束后,使用本地变量会发生不好的结果。这可以通过将main()中变量“a”的
地址来避免,这样以后还可以修改这个地址存储的值。

使用特权

评论回复
沙发
花间一壶酒sd| | 2024-8-31 21:56 | 只看该作者
问题在于函数 inc() 返回了一个指向局部变量 a 的指针,而局部变量 a 在函数 inc() 执行完毕后会被销毁。因此,返回的指针会指向一个已经释放的内存区域,导致未定义行为

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

1449

帖子

4

粉丝