2016-08-13 5 views
-1

私はこれらのリンクリストを解放しようとしていますが、コンパイルエラーは発生しませんが、valgrindは「30個のallocs、14個の解放、6,377バイトの割り当て」と言います。 この機能は、リスト内のすべての割り当てを消去しないでください。cでリンクリストを解放する

void free_mem(struct medico *head_m, struct paciente *head_p , struct consulta *head_c) 
{ 
    struct medico *tmp_m = NULL; 
    struct paciente *tmp_p = NULL; 
    struct consulta *tmp_c = NULL; 

    while (!head_m) { 
     tmp_m = head_m->next; 
     free(head_m); 
     head_m = tmp_m; 
    } 

    while (!head_p) { 
     tmp_p = head_p->next; 
     free(head_p); 
     head_p = tmp_p; 
    } 

    while (!head_c) { 
     tmp_c = head_c->next; 
     free(head_c); 
     head_c = tmp_c; 
    } 
} 
+1

[最小テストケース](http://stackoverflow.com/help/mcve)を作成してください。 –

+0

'while()'ループを 'for();'ループに書き換えると、間違ったことが分かります。 – wildplasser

答えて

1

あなたのループ条件が間違っている:

while (!head_m) 

head_mがNULLでない場合は、ループが実行されることはありません。解決するには!

while (head_m) 
+0

ありがとうございました!これは本当にノブの間違いでした.-そして、すべてを見つけやすいので今は解放されています。 – m3k3r1

関連する問題