首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针电阻

指针电阻
EN

Stack Overflow用户
提问于 2010-08-11 01:40:15
回答 6查看 243关注 0票数 3

如果*get_ii()返回堆内存,而不是堆栈内存,这个问题会被消除吗?

代码语言:javascript
复制
01 int *get_ii()  
02 {  
03    int ii;        // Local stack variable  
04    ii = 2;  
05    return ⅈ  
06 }  
07 main()  
08 {  
09   int *ii;  
10   ii = get_ii();  // After this call the stack is given up by the routine   
11                   // get_ii() and its values are no longer safe.  
12    
13   ... Do stuff  
14   ..  ii may be corrupt by this point.  
15 }  

来源- http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-11 01:47:16

是。从堆中分配可以在这里工作。确保在某个地方再次释放它,否则会泄漏内存。

通常,智能指针有助于这种“不要忘记”的逻辑。

票数 7
EN

Stack Overflow用户

发布于 2010-08-11 01:45:15

对--堆中的内存(例如,用get_ii()分配的内存)将持久存在于ii的作用域之外。只需确保释放它。您也可以分配将static int ii声明为get_ii(),在这种情况下,它的指针也将存在于malloc之外。

票数 3
EN

Stack Overflow用户

发布于 2010-08-11 01:48:49

基本上,您返回的是一个不再存在的变量的地址(ii是在函数get_ii()开始执行时创建的,只有在函数退出时才会存在)。对main()int *ii指向的内存的任何访问都会导致未定义的行为。

另一方面,堆内存是在您显式请求它时分配的,直到您显式请求它时才释放。因此,如果您在函数中分配一个内存块,那么将指向该内存块的指针返回给调用者是完全没有问题的。只需确保记录谁负责在不再需要时释放内存块!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3451799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档