#include<stdio.h>
#include<stdlib.h>
#define LOOPS 100
#define RAYSIZE 1024
int main (int argc, char **argv)
{
int count = 0;
char *pointer = NULL;
for(count=0; count<LOOPS; count++) {
pointer = (char *)malloc(sizeof(char) * RAYSIZE);
}
free(pointer);
return count;
}
答案 0 :(得分:1)
你正在泄漏内存前99次,因为你的免费通话不在循环中。仅释放最后分配的内存。
答案 1 :(得分:1)
每次循环都会分配一些内存并设置pointer
指向它。当你这样做时pointer
不再指向最后一块内存,但它仍然分配给你的程序。当你拨打free(pointer)
时,你只能释放你分配的最后一块内存。
答案 2 :(得分:0)
malloc
与free
的通话次数应尽可能多。在这里,您可以在循环中调用malloc
,这意味着您将比free
更多地调用它。