C++ 教程源码求指导~

-bootblack- 2016-01-29 02:58:26

如上代码程序是<<C++ primer plus>>教程源码,小弟心中有个疑惑,恳请大神指导~
我记得我在学习C的过程中,公司同事跟我说过:在被调用函数中:如果函数的返回值是某个局部变量,或者某个局部变量的地址,那么这个返回值是不确定的,因为局部变量时放在栈内存中的,如果退出这个函数,这个局部变量所在的内存是不确定的.
现在在学习C++的过程中,我想请教大神帮我指点下~
问题1:在C编译器环境下,这句话是正确的吗???
问题2:如果将C编译环境换为C++编译环境,那么这句话还能同样成立吗?如果成立的话,那上面的这段程序该如何解释???
恳请大神指教~~~
...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2016-01-29
  • 打赏
  • 举报
回复
引用 8 楼 u010165006 的回复:
比如 int sum(int a,int b) { int result=a+b; return result; }有问题吗? 但是 char *getStr(const char *src) { char dest[MAX]; ... return dest; }才是有问题的。
ok!
ooolinux 2016-01-29
  • 打赏
  • 举报
回复
比如 int sum(int a,int b) { int result=a+b; return result; }有问题吗? 但是 char *getStr(const char *src) { char dest[MAX]; ... return dest; }才是有问题的。
lm_whales 2016-01-29
  • 打赏
  • 举报
回复
返回局部变量,没有任何问题,因为返回值 只需要 复制 返回表达式的值 有问题的是,返回局部 非静态变量 的引用,或者地址 另外动态分配的内存,不是局部变量,也不是局部变量的地址。 本质上,它是全局内存, 只是C,C++不提供方法,给这块内存取名 因此,他们是无名的。 也因此,谈不上变量; 使用动态内存的方法, 一般是 通过有名的指针变量, 跟这块内存相联系(通过指针的初始化,或者赋值,记录这块内存的地址到指针中)。 或者传递给函数。
ooolinux 2016-01-29
  • 打赏
  • 举报
回复
引用 4 楼 liuchangkk1 的回复:
上面各位大神说的,还是不能理解,以下是小弟的看法: char * p = new char [n+1]; 1>指针p本身还是存储在栈中的,而因为new产生的内存地址是在堆内存中的----这句话大神没有意见吧 2>现在因为这个堆内存地址没有名称,没有办法使用它,所以我们将这个地址赋值给了p,这个相当于改变了指针p中存储的地址内容, 但是指针p所在的内存依然是在栈内存中啊----这是小弟的理解,还望大神指点~~~ 3>另外,那函数能返回局部变量吗(不是局部变量的地址)???
return p跟return 0x00abffc4(比如)有区别吗?
赵4老师 2016-01-29
  • 打赏
  • 举报
回复
VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533
-bootblack- 2016-01-29
  • 打赏
  • 举报
回复
上面各位大神说的,还是不能理解,以下是小弟的看法: char * p = new char [n+1]; 1>指针p本身还是存储在栈中的,而因为new产生的内存地址是在堆内存中的----这句话大神没有意见吧 2>现在因为这个堆内存地址没有名称,没有办法使用它,所以我们将这个地址赋值给了p,这个相当于改变了指针p中存储的地址内容, 但是指针p所在的内存依然是在栈内存中啊----这是小弟的理解,还望大神指点~~~ 3>另外,那函数能返回局部变量吗(不是局部变量的地址)???
yshuise 2016-01-29
  • 打赏
  • 举报
回复
楼主你要记住malloc是堆,除了free,他是不会消失的
paschen 版主 2016-01-29
  • 打赏
  • 举报
回复
你返回的并不是局部变量的地址,而是动态分配的内存,这部分内存不是在栈上,而是在堆上 C和C++一样,只是C中你需要用malloc来动态分配内存 如果写成: char ch; return &ch; 这种才是返回局部变量的地址,因为ch是一个局部变量
ynsenyu 2016-01-29
  • 打赏
  • 举报
回复
这个我也很困扰的,不过是可以这样用的,好像好用完返回的指针要delete掉才可以

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧