请阅读下面代码片段并且回答问题:关于这段代码,下列说法正确的是
#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 展开
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 展开
1个回答
展开全部
觉得是B,局部变量存储在栈,由系统自动释放;malloc申请的内存存放在堆,要用free函数释放。
A选项,func_b的数组存储在栈,由系统控制,效率应该高些,
C选项,应该是func_a 有内存泄漏
D选项,两者都不会自动初始化。
A选项,func_b的数组存储在栈,由系统控制,效率应该高些,
C选项,应该是func_a 有内存泄漏
D选项,两者都不会自动初始化。
追问
为什么func_a 有内存泄漏
追答
前面说了malloc申请的内存存放在堆,要由程序员使用free()函数释放,但是func_a没有保留这个新申请的内存的指针引用(char *tmp 指针变量本身会在func_a结束后被系统释放)。后面你想释放那部分动态申请的内存都不行了,所以会造成内存泄漏。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询