reallocでのメモリの割り当てで、
buf = realloc( buf, 1024 );
のように書かれているソースがありますが、この書き方のように
reallocの第1引数とreallocの帰り値を受ける変数を同じにすると
reallocのエラーに対応できませんよね?


それとは別に、buf = (char*)malloc(4);で下図のようになったとすると

 ×××××××××××××××○○○○×
 あいうえおかきくけこさしすせそたちつてと

その後の buf = realloc( buf, 8 );では、[たちつて]に
かぶることなく下図のようになると思います。
三角の部分は丸の部分にデータをコピーするために
完全には開放しないはずですよね。

 ×○○○○○○○○××××××△△△△×
 あいうえおかきくけこさしすせそたちつてと

ここからさらにreallocすると、三角だった部分は下図のように
reallocによる新しい領域に使われる可能性はありますか?

 buf = realloc( buf, 9 );

 ×△△△△△△△△×○○○○○○○○○×
 あいうえおかきくけこさしすせそたちつてと

図のひらがなはアドレスを意味しています。
定幅フォントのエディタにコピーして見ていただきたいです。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>reallocの第1引数とreallocの帰り値を受ける変数を同じにすると


>reallocのエラーに対応できませんよね?

その通りです。危険です。

>三角の部分は丸の部分にデータをコピーするために
>完全には開放しないはずですよね。

新しい領域の確保が成功した場合には、
・内容をコピーして
・そのあと元の領域を開放
しています。
realloc()が完了した時点では解放されています。
(メモリ確保に失敗した場合は、もとのメモリ領域はそのまま)

>三角だった部分は下図のようにreallocによる新しい領域に使われる可能性はありますか?

その部分は既に解放されているので、あり得ます。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2003/09/26 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング