书上说:“当动态分配了一些内存而没有保留对它们的引用,就会内存泄漏,此时无法释放内存。这常常发生在循环内部,由于没有释放不再需要的内存,程序会在每次循环时使用越来越多的内存,最终占用全部内存。”
本人按书上说的做出以下,问一下本人的理解能否正确?
本人按书上说的做出以下,问一下本人的理解能否正确?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a=20;
while(a>1)
{
++a;
malloc(a);
}
return 0;
}
解决方案
40
对的,还是会分配空间,由于没有记录malloc出来的地址,所以会造成内存泄漏
你可以用直接判断malloc的返回值,由于没有释放,所以经过一定的循环以后,堆空间耗尽,就会malloc失败
你可以用直接判断malloc的返回值,由于没有释放,所以经过一定的循环以后,堆空间耗尽,就会malloc失败
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int a=20;
while(a>1)
{
++a;
if(malloc(1024 * 1024 * a) == NULL)
{
printf("%d\n", a);
break;
}
}
return 0;
}