[543] Re:reallocについて
投稿者:(ぱ)
2007/02/20 02:13:25
>>>data.cpItem[i] = malloc(sizeof(char) * 64);
>
>realloc() の第一引数を、NULL にすれば、malloc() と同じ動作をします。
>よって、realloc(NULL,sizeof(char) * 64); でも問題ありません。
いや、もちろんそれは知っていますが、スタイルとしてどちらを取るかという
問題です。
もともと、realloc()の第一引数をNULLにすればmalloc()と同じ動作をする、
という仕様は、最初のメモリ確保と2回目以降のメモリ確保とで別々のコードを
記述する手間を避けるためのものでしょう。
ですから、この例で言えば、data.cpItemの指す先を確保した際、
その中身を全部NULLに初期化しておけば、
data.cpItem[i] = realloc(data.cpItem[i],sizeof(char) * 64);
と書けば、このポインタの指す先にデータが来るかどうかわからないような
時、重複したコードを書かなくてよくなるわけです。
この仕様自体はそれなりに便利なものだとは思うのですが(でもこれも
realloc()の仕様としてはオーバースペックだという意見もありうるわけですが)、
最初から第一引数に定数のNULLを渡すくらいなら、malloc()を使うべきでしょう。
…が、既にかずまさんからツッコミが入ってますが、まきじさんのコードだと、
2回目のrealloc()でも第一引数にNULL渡してますね…ケアレスミスだとは思いますが。
これは私は気付いていませんでした。