首页新闻找找看学习计划

C++ 函数体数组申请的内存函数结束时会返回吗? 求解!!! 请看示例

0
悬赏园豆:5 [已解决问题] 解决于 2015-10-17 12:22

例如:
char *doubleToString(double value, int force_f)
{
size_t bufferSize = 256;
//char *buffer = (char*)malloc(bufferSize);
char buffer[256];
if (force_f == 1)
snprintf(buffer, bufferSize, "%f", value);
else
snprintf(buffer, bufferSize, "%g", value);
return(buffer);
}
buffer应该是在栈内存上,函数结束时该变量应该消失,但是buffer怎么还会返回正确值??

町町独立的主页 町町独立 | 初学一级 | 园豆:146
提问于:2015-10-15 09:21
< >
分享
最佳答案
1

因为这块内存中的数据还没被及时清理掉

收获园豆:5
aswater | 初学一级 |园豆:193 | 2015-10-15 11:07
其他回答(1)
0

malloc申请的内存位于堆上,不会自动释放;buffer指向这块内存的地址;函数结束时,将buffer指向的这块内存的地址传了出去,然后buffer消失。即,你所申请的内存地址没有被释放掉,所以可用。

天涯野草 | 园豆:202 (菜鸟二级) | 2015-10-15 16:41

我把函数第二行注释掉了,用的是数组 buffer[256] 返回的值,我认为应该是这块内存中数据没有及时清理掉。

支持(0) 反对(0) 町町独立 | 园豆:146 (初学一级) | 2015-10-15 16:55

@町町独立: 内存数据不会自动清理,只有可能被手工清理或被其他内存操作所覆盖

支持(0) 反对(0) 蓝剑001 | 园豆:211 (菜鸟二级) | 2015-10-17 11:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册