讨教关于没有释放动态分配的内存

C语言 码拜 9年前 (2016-04-03) 664次浏览
书上说:“当动态分配了一些内存而没有保留对它们的引用,就会内存泄漏,此时无法释放内存。这常常发生在循环内部,由于没有释放不再需要的内存,程序会在每次循环时使用越来越多的内存,最终占用全部内存。”
本人按书上说的做出以下,问一下本人的理解能否正确?

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int a=20;
	while(a>1)
	{
		++a;
		malloc(a);
	}
	return 0;
}
解决方案

40

对的,还是会分配空间,由于没有记录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;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明讨教关于没有释放动态分配的内存
喜欢 (0)
[1034331897@qq.com]
分享 (0)