[开发工具] 返回本地变量的地址的情况分析

[复制链接]
1125|2
 楼主| OKAKAKO 发表于 2024-8-31 16:20 | 显示全部楼层 |阅读模式
问:下面代码有问题吗?如果有,该怎么修改?

  1. #include<stdio.h>

  2. int* inc(int val)
  3. {
  4.   int a = val;
  5.   a++;
  6.   return &a;
  7. }

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

  13.     return 0;
  14. }


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

花间一壶酒sd 发表于 2024-8-31 21:56 | 显示全部楼层
问题在于函数 inc() 返回了一个指向局部变量 a 的指针,而局部变量 a 在函数 inc() 执行完毕后会被销毁。因此,返回的指针会指向一个已经释放的内存区域,导致未定义行为
您需要登录后才可以回帖 登录 | 注册

本版积分规则

260

主题

2096

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部