2013-03-08 65 views
-2

在下面的程序中,我需要在哈希表,列表元素和唯一字上調用free()。我嘗試了幾件事情,但都是破壞程序或增加錯誤信息。一些嘗試在評論和大膽。如何修復此程序中的內存泄漏

有沒有人知道在哪裏以及如何打電話免費?它作爲指針被混淆了。

h_ptr *htable; 
int tsize; 


void new_table(int size) 
{ 
    tsize = size; 
    htable = (h_ptr *) calloc(size, sizeof(h_ptr)); 
    if (!htable) { 
    fprintf(stderr, "Couldn't allocate hash array, exiting\n"); 
    exit(1); 
    } 


    for(int i=0; i<size; i++) 
     { 
    htable[i]=NULL; 
     } 
} 
+6

您的問題中代碼太多。你可以試試它嗎? – alestanis 2013-03-08 19:18:19

+0

我們不是你的調試器,選擇一個部分,並詢問有關它的具體問題 – 2013-03-08 19:25:39

+0

你的問題已關閉(所以我不能「回答」),但瀏覽你的代碼,我看到你做錯了什麼。兩條適用於你的經驗法則;首先,每次調用'malloc()'都應該有一個匹配的調用,只要你需要它,'free()'就會保持到內存中。你有一些函數在頂部調用malloc,在底部釋放然後返回指針。不,這很糟糕。您將指針傳回給調用者,然後調用者完全釋放它。 – Mike 2013-03-08 20:02:50

回答

2

防止內存泄漏總是相同的。如果您已經動態地分配了一些內存,請將其刪除。因此,如果您的功能使用malloc()某處也寫free()某處以避免內存泄漏

+0

是的,但每次我嘗試它時,它會破壞程序或給我更多的內存泄漏錯誤(使用Valgrind)。我不確定在哪裏免費調用以及使用什麼語法作爲指針。我們在哈希表,列表元素和唯一字上調用free()。例如,我在哪裏可以找到「結果」變量? – Damon 2013-03-08 19:57:20

+0

一個指針應該作爲自由參數傳遞。它可以是任何東西的指針。其實原型是免費的(void *) – deeiip 2013-03-08 20:00:14

+0

是的,我試過「free((void *)htable);」(第二行,它增加了更多的內存泄漏。) – Damon 2013-03-09 01:34:32