2014-09-29 84 views
0

說解放出來的指針,我有2種功能,如these-C:從另一個功能

char* f2(void){ 
    char* str = malloc(100); 
    strcpy(str, "string1"); 
    return str; 
} 

char* f1(void){ 
    char* reply = malloc(150); 
    strcpy(reply, "string = "); 
    strcat(reply, f2()); 
    return reply; 
} 

這是我從主調用諸如所謂

printf("reply = %s", f1()); 

我的問題: 是否足夠我單獨釋放(答覆)還是必須在f1()中明確釋放(str)?

+4

返回的指針,你必須'免費()'兩次 – thumbmunkeys 2014-09-29 12:28:01

回答

5

您必須免費得到f1()的返回值。更改

strcat(reply, f2()); 

到:

char *str = f2(); 
strcat(reply, str); 
free(str); 
+0

令人印象深刻。非常好。 – Igor 2014-09-29 12:34:10

2

無論你手動分配(例如:的malloc,釋放calloc等),您必須手動釋放..

2

在功能f1你必須釋放函數返回指針f2否則會出現內存泄露

char* f1(void){ 
    char* reply = malloc(150); 
    char *str = f2(); 

    strcpy(reply, "string = "); 
    strcat(reply, str); 
    free(str); 

    return reply; 
} 

此外,在主,你必須釋放由函數f1

char *reply = f1(); 

printf("reply = %s", reply); 

free(reply); 
你分配兩次