2013-04-12 75 views
0
int main() 
{ 
    char* str; 

    str = "string one"; 
    str = "string two"; 
    str = func(); 
    str = "string four"; 
    return 0; 
} 

char* func() 
{ 
    char* tmp; 

    tmp = "string three"; 
    return tmp; 
} 

我知道str = "string one";此字符串分配內存,該內存的地址分配給str。通過正確的事情應該發生在str = "string two";str = func();str = "string four";執行,現在我想知道如何處理在這種情況下的內存。分配給這些字符串的內存在新分配發生時釋放,還是內存泄漏的一種形式?此代碼是否導致內存泄漏

+1

只是爲了謹慎,做自己的青睞,並採取指定字符串文字的習慣,只有在該聲明'字符常量變量*'內存。字符串文字是不可修改的,所以像你一樣聲明它們可能只會給你帶來麻煩。 –

+1

區別:for str =「text」;內存由LINKER分配,str = malloc();你分配內存,並應該釋放();記憶。 –

回答

3

代碼中沒有內存泄漏,因爲它沒有分配任何內容。每個任務的右側只有字符串文字,並且不需要(也不能)解除分配。

"life-time" of string literal in C

1

無需free這種類型的分配。因爲它們僅在stack(temp)內存中分配。如果您有分配使用malloc(他們在heap分配),你必須free