2011-04-11 39 views
0
#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; 
} 

回答

1

由於您的免費通話超出循環範圍,因此您首次泄漏內存99次。只有最後分配的內存被釋放。

0

對於free,您應該有多少個電話malloc。在這裏,您可以在循環中呼叫malloc,這意味着您將有更多的呼叫,而不是free

1

每次通過循環時,您都會分配一些內存並設置pointer指向它。當你這樣做時pointer不再指向最後一塊內存,但它仍然分配給你的程序。當你撥打free(pointer)時,你只能釋放你分配的最後一塊內存。

+0

感謝您的時間 – user1754940 2011-04-11 06:45:51