2015-05-11 203 views
0

我有一個在c中使用malloc分配內存多次的算法。我想寫一個函數,當程序全部完成時釋放內存,但我不確定如何構造它。難道只是多次撥打free()?我對C和內存分配比較陌生,所以任何幫助都將不勝感激。C內存分配問題

計劃:

typedef struct State State; 
typedef struct Suffix Suffix; 

struct State { /* prefix + suffix list */ 
    char* pref[NPREF]; /* prefix words */ 
    Suffix* suf;   /* list of suffixes */ 
    State* next;   /* next in hash table */ 
}; 

struct Suffix { /* list of suffixes */ 
    char * word;   /* suffix */ 
    Suffix* next;   /* next in list of suffixes */ 
}; 
+1

我會建議只包含相關的代碼片段 – Levi

+1

標準警告:請[不要轉換](http://stackoverflow.com/q/605845/2173917)'malloc()'和家族的返回值'C'。 –

+0

「清晰記憶」是什麼意思?替換爲零?是什麼原因? –

回答

3

malloc每次調用應該有一個相應的調用free,使用由malloc返回指針的值。

你需要用某種容器中,通過malloc在你的程序返回的值存儲如數組,鏈表,並從main在返回之前調用這些值free

寫的線沿線的一個功能:

void freeMemory() 
{ 
    int i = 0; 
    State* sp = NULL; 
    State* tmp = NULL; 

    for (i = 0; i < NHASH; ++i) 
    { 
     sp = statetab[i]; 
     while (sp != NULL) 
     { 
     tmp = sp->next; 
     free(sp); 
     sp = tmp; 
     } 
    } 
} 

return語句之前從main調用它。

+4

「每次調用malloc _必須有相應的空閒」。我會說每個'malloc''應該有一個相應的'free'。像GTK這樣的庫[不要總是爲'free''memory']打擾(http://stackoverflow.com/questions/16659781/memory-leaks-in-gtk-hello-world-program) – Levi

+0

@John,你需要遍歷列表並在每個指針上調用'free'。 –