2012-02-20 8 views
3

のサイズを増やすためにmallocを使用することは可能ですか?配列を教えてください。 (新しい配列を割り当てずにmemcpyを実行することなく)もしそうなら、どうですか?mallocを使用して既存の配列のサイズを増やすことはできますか?

+0

あなた自身:アレイの横にあるスペースが既に何か他のものに割り当てられているとすれば、どうすれば可能ですか? – delnan

+0

@delnan http://stackoverflow.com/a/9367362/901059ここで私はすでにこれがうまくいかない理由を指摘しました。 – mydogisbox

+0

@mydogisbox:知っているので、私はOPに提案します。 – delnan

答えて

13

reallocを参照してください。配列のアドレスが変更される可能性があるので、必ず戻り値を代入してください。

+0

配列のサイズを変更できない場合はNULLを返す可能性があるため、戻り値を*別の変数に代入してNULLをテストする必要があります。 –

+0

確かに。同じことが 'malloc'にも当てはまります - 私は多くのプログラムが_that_の戻り値をチェックするのを悩ますのでしょうか? –

4

いいえ、アレイには連続したメモリが必要であり、現在の割り当て後のメモリが空き状態であることを保証する方法はありません。 @James McLaughlinが指摘しているように、新しい配列を作成してからmemcopyを実行する代わりに、reallocを使うことができますが、基本的に同じことです。

+0

メモリオブジェクトの新しいサイズがオブジェクトの移動を必要とする場合(例えば、クローズメモリフィールドがすでにいくつかのプログラムによって占有されている場合)にのみ、malloc + memcpyと同じことをするようです。私は小さな配列(数キロバイト)で作業するので、ほとんどの場合、動きは必要ありません。 –

+1

これは当てはまりますが、配列のサイズを増やすことが必要な特定の質問に対処しました。単純に新しい場所に割り当てるのではなく、 – mydogisbox

+1

もしあなたがC++であれば、reallocと同じようにサイズ変更を処理するので、単にstl vectorを使うことをお勧めします。 – mydogisbox

関連する問題