书上说:“当动态分配了一些内存而没有保留对它们的引用,就会内存泄漏,此时无法释放内存。这常常发生在循环内部,由于没有释放不再需要的内存,程序会在每次循环时使用越来越多的内存,最终占用全部内存。”
本人按书上说的做出以下,问一下本人的理解能否正确?
本人按书上说的做出以下,问一下本人的理解能否正确?
#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; }