如果*get_ii()返回堆内存,而不是堆栈内存,这个问题会被消除吗?
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
谢谢
发布于 2010-08-11 01:47:16
是。从堆中分配可以在这里工作。确保在某个地方再次释放它,否则会泄漏内存。
通常,智能指针有助于这种“不要忘记”的逻辑。
发布于 2010-08-11 01:45:15
对--堆中的内存(例如,用get_ii()分配的内存)将持久存在于ii的作用域之外。只需确保释放它。您也可以分配将static int ii声明为get_ii(),在这种情况下,它的指针也将存在于malloc之外。
发布于 2010-08-11 01:48:49
基本上,您返回的是一个不再存在的变量的地址(ii是在函数get_ii()开始执行时创建的,只有在函数退出时才会存在)。对main()中int *ii指向的内存的任何访问都会导致未定义的行为。
另一方面,堆内存是在您显式请求它时分配的,直到您显式请求它时才释放。因此,如果您在函数中分配一个内存块,那么将指向该内存块的指针返回给调用者是完全没有问题的。只需确保记录谁负责在不再需要时释放内存块!
https://stackoverflow.com/questions/3451799
复制相似问题