0

cmallcで割り当てられた符号なしポインタ配列を解放するための最良の方法は何ですか?

 uint8_t *buf;
 buf = cs_calloc(ca->len + 13);

私はこれが好きですが、コンパイルの警告が表示されたので、これは正しくないことを知っています:

警告:「free」の引数1を渡すと、キャストなしで整数からポインタが作成されます

for (i = 0; i < ca->len + 13; i++)
{   
 free(buf[i]);
buf[i] = NULL;
}

free(buf);

これがcs_callocコードです:

void *cs_calloc(size_t size){

 return (calloc (1,size));
 }

私の質問は1です。私が解放する方法、buf、つまり、ループ内の配列の各要素を最初に解放することを意味します(free(buf [i])は正しいですか?配列の要素を解放する必要がありますか?その上

  1. なぜそのコンパイル警告が表示されるのですか?それが間違っている場合は、割り当てられたメモリを解放する方法を誰かが修正できますか(修正方法のコードを教えてください)。

前もって感謝します

4

1 に答える 1

1

必要なのはfree(buf)それ以上ではありません。ドロップするだけでfor設定が完了します。しようとするfree(buf[i])と間違っており、ライブラリをだましてbuf[i](小さな整数)をポインタとして扱うようになります。

唯一の単純なルールがあります:あなたがまたはfreeから受け取ったものだけです。malloccalloc


なぜそのコンパイル警告が発生したのか

ポインタが必要freeなときに整数で呼び出したため、警告が表示されました。free

于 2013-02-25T08:39:37.867 に答える