gcc 4.5.1 c89使用strdup後無法釋放內存
我試圖釋放一些內存。但是,當我檢查valgrind時,內存還沒有被釋放。我想知道我做錯了什麼。
我有以下結構:
typedef struct tag_cand_results {
char *candidate_winners[NUMBER_OF_CANDIDATES];
} cand_results;
我創建這個結構的目的:
cand_results *results = NULL;
我分配用於結構中的一些存儲器。
results = calloc(1, sizeof *results);
一些數據分配給它
results->candidate_winners[0] = strdup("Steve Martin");
results->candidate_winners[1] = strdup("Jack Jones");
然後我嘗試釋放所有的內存分配:
free(results->candidate_winners[0]);
free(results->candidate_winners[1]);
free(results);
Just to be safe assign to NULL
results = NULL;
我得到的valgrind下面的輸出。
==8119== 72 bytes in 6 blocks are definitely lost in loss record 1 of 2
==8119== at 0x4A05E46: malloc (vg_replace_malloc.c:195)
==8119== by 0x3FE2E82A91: strdup (strdup.c:43)
==8119== by 0x400E5A: main (driver.c:116)
==8119==
==8119== 72 bytes in 6 blocks are definitely lost in loss record 2 of 2
==8119== at 0x4A05E46: malloc (vg_replace_malloc.c:195)
==8119== by 0x3FE2E82A91: strdup (strdup.c:43)
==8119== by 0x400E72: main (driver.c:117)
我不知道爲什麼內存沒有被釋放?
非常感謝您的任何建議,
你能後的最小*完整*程序有關其的valgrind仍抱怨這種方式。 – NPE 2010-12-16 16:20:36
我的源代碼中有些地方正在發生。剛剛向Pax發表了評論。 – ant2009 2010-12-16 16:33:33