2017-02-26 80 views
-4

我的代碼看起來像:當存儲器被動態分配Valgrind的報告內存泄漏雖然沒有一個並[c]

void kernel_version(char * kernel_str) 
{ 
    FILE * fp  = fopen(log, "a"); 
    FILE * pipe  = popen("uname -r", "r"); 

    if(fp && pipe) 
    { 
     // 
    } 

    pclose(pipe); 
    pclose(fp); 
} 

泄漏通常發生。但是,我並沒有動態地在我的代碼中的任何地方分配內存。 我無法指出泄漏。

+0

調用在KERNEL_VERSION FP函數,pclose似乎值得懷疑... –

+0

@JonathanvonSchroeder是的,我指出來了。我相信那是事情出錯的地方。 –

+4

[Valgrind](http://www.valgrind.org/)在哪裏說泄漏是?你爲什麼不向我們展示其產出 - 或輸出的相關分部?當你被告知時,讓我們猜測是徒勞的。只是因爲你寫的代碼並不使用動態內存分配,並不意味着你調用的函數(你沒有寫的)沒有做動態內存分配。許多功能都可以動態分配內存。文件流操作通常會執行動態內存分配。 –

回答

1

不應該最後一行是fclose(fp)

我認爲這是事情出錯的地方。

變更pclose(fp)變爲fclose(fp)

fopen() -> fclose() 

popen() -> pclose()