gcc 4.5.1 c89
メモリを解放しようとしています。ただし、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)
なぜメモリが解放されないのかわかりませんか?
提案をありがとう、