2016-12-23 1 views
2

私の質問はちょっと混乱しますが、バッファを最小限に抑えたら、データの左にreallocはどうなりますか?たとえば、バッファに50バイトのデータが格納されていると仮定します。後で私のコードで私はreallocと私のバッファーのサイズを変更するだけで30バイトまで保持します。 reallocの左に20バイトを超えるものは何ですか?それは、時にはそれがその場でそれを行うために管理し、それが返すポインタは、あなたが入れポインタと同じ数値であることを除いバッファを小さくするためにバッファをreallocすると、正しいサイズに達するまでバッファ内のデータが削除されますか?

+3

を参照してください?メモリの圧力がない場合、論理的な処理はバッファの最大サイズを変更すること以外は何もしません。 –

+0

私はまだcの初心者ではないので、私はまだcのすべての仕組みを知らない。 –

+1

それはもっと修辞的な質問だった。 –

答えて

7

reallocは、正確にmalloc + memcpy + freeである(しかし、あなたはそれに頼ることはできません)。左端の20バイトが解放されます。 C標準から

7.22.3.5 realloc関数

realloc機能は、古いオブジェクトはptrによって指さ解放し、sizeで指定されたサイズを持つ新しいオブジェクトへのポインタを返します。新しいオブジェクトの内容は、解放前の古いオブジェクトの内容と同じでなければならず、新しいサイズと古いサイズのうちの小さいものになります。新しいオブジェクト内の古いオブジェクトのサイズを超えるバイトは、不確定な値を持ちます。

は、それは実装依存ではないでしょうもhttp://en.cppreference.com/w/c/memory/reallocまたはhttp://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html

+2

@FumerianGaming私は衝動を理解していますが、ここで感謝を書く必要はありません。ちょうどupvoteの答えが好きで、それがあなたの問題の解決策ならば、それを正解とマークするべきです。 –

関連する問題