请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 106|回复: 0

返回栈上变量的地址

[复制链接]

70

主题

70

帖子

232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
232
发表于 2021-9-10 19:43:36 | 显示全部楼层 |阅读模式
函数不可以返回栈上的变量的地址,其内容在函数返回后就会失效。

  1. // Bad
  2. char* Foo(char* sz, int len){
  3.   char a[300] = {0};
  4.   if (len > 100) {
  5.     memcpy(a, sz, 100);
  6.   }
  7.   a[len] = '\0';
  8.   return a;  // WRONG
  9. }
复制代码

而应当使用堆来传递非简单类型变量。

  1. // Good
  2. char* Foo(char* sz, int len) {
  3.     char* a = new char[300];
  4.     if (len > 100) {
  5.         memcpy(a, sz, 100);
  6.     }
  7.     a[len] = '\0';
  8.     return a;  // OK
  9. }
复制代码

对于C++ 程序来说,强烈建议返回   string  、  vector  等类型,会让代码更加简单和安全。

关联漏洞:
  1.    高风险-内存破坏
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2022-1-17 09:04 , Processed in 0.084435 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表