请阅读下面代码片段并且回答问题:关于这段代码,下列说法正确的是

#defineSIZE_20M(20*1024*1024)voidfunc_a(){char*tmp=malloc(SIZE_20M)return;}voidfunc_b... #define SIZE_20M (20*1024*1024)
void func_a()
{
char *tmp = malloc(SIZE_20M)
return;
}
void func_b()
{
char temp[SIZE_20M];
//...do something using temp
return;
}

A、func_a 获得临时内存的方式效率通常更高。
B、func_b 使用了太多的栈,程序可能会在运行时候崩溃。
C、func_b 存在内存泄露
D、func_a 和func_b 分配的内存会自动初始化0
展开
 我来答
好求知
2015-07-31 · TA获得超过6515个赞
知道大有可为答主
回答量:966
采纳率:80%
帮助的人:1173万
展开全部
觉得是B,局部变量存储在栈,由系统自动释放;malloc申请的内存存放在堆,要用free函数释放。

A选项,func_b的数组存储在栈,由系统控制,效率应该高些,
C选项,应该是func_a 有内存泄漏

D选项,两者都不会自动初始化。
追问
为什么func_a 有内存泄漏
追答
前面说了malloc申请的内存存放在堆,要由程序员使用free()函数释放,但是func_a没有保留这个新申请的内存的指针引用(char *tmp 指针变量本身会在func_a结束后被系统释放)。后面你想释放那部分动态申请的内存都不行了,所以会造成内存泄漏。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式