は*

2017-12-13 3 views
0

のボイドを含む構造体を解放は*

static void freeNode(node_t *node) { free((void*)node); } 

はなぜノードがvoid *にキャストされましたか? ちょうどfree(node)でしたか?

そして、以来、私は別の構造に取り組んでいます:

typedef struct TaskNode { 
    void (* fun)(void *); 
    void * arg; 
    struct Task * next; 
} task_t; 

は、私はそれを解放する前に、あまりにもvoid *にmallocさ構造体へのポインタをキャストする必要がありますか?

+1

あなたがC89にいて、 'stdlib.h'を含んでいなかった場合。 'free((void *)node);'は正しく、 'free(node);は正しくありません。しかし、その時代は私たちの後ろにあります –

答えて

2

キャストは、この文脈では無用である、Cの(ないexemple用STDARG用)のコンテキストの多くでvoid *へのポインタを自動宣伝:

free((void*)node); 

は同等です:

free(node); 
2

void*へのキャストは無意味であることは間違いありません。そして、それは仲間のプログラマーのために何かを明確にしていないので、そこにはいけません。

当然のことながら、両方の例がそうです。