ダイナミックアレイ上のメモリを再割り当てするために使用する関数です。私はtypedef'd struct lottery
〜lot
を持っています。私は参照構造体の配列(a
)とそれを持ってほしい新しいサイズ(n
)を渡しています。私はa
にreallocすることができるように一時的な配列(b
)を宣言しています。これは動作するはずではないと確信していますが、
b = realloc()
などでヒープ上にいくつかのバイトを作成していますが、機能を終了する前にfree(b)
にすると正しく動作しません。私が再び呼び出すと、b == NULL
はtrue
になりますが、free(b)
を削除してもうまく動作しますが、ヒープ上にガベージバイトを残しているため、正しくはないと思います。誰か私に問題を説明してもらえますか?
lot *Enterd(lot **a, int n) {
lot *b = NULL;
b = (lot *)realloc(*a, n * sizeof(lot));
if (b == NULL) {
printf("Memory could not be allocated for the new input.\n");
return NULL;
}
*a = b;
free(b);
return *a;
}
トム・ザイッチとmelpomene.Whyが、私はそれをキャストするべきではないのですか?ユニでは、我々はreallocのがvoid *を返し、我々はそれをキャストする必要があることを学びました、ありがとうございます。 (?) – Edward
@Edwardいいえ、 'malloc'と' realloc'は 'void *'を返しますので、キャストする必要はありません。 'void *'ポインタは暗黙的に任意のオブジェクトポインタ型に変換できます。一方、鋳造は問題を隠すことができます:http://c-faq.com/malloc/mallocnocast.html – melpomene
私はプロフェッサーに尋ねますが、とにかくフィードバックと助けをくれてありがとう! – Edward