reallocの------ malloc関数によって得られたメモリ空間を拡張

するchar * p =のmalloc(1024)。
CHAR * Q =のrealloc(P、2048)。

今の質問は、私たちはポインタpを処理する方法です。それが直接のp = NULLである場合、私はちょうど、最も直感的な理解に基づいて開始し、。最後に、ちょうどそれに空間Qを解放します。

最近、パッケージすることがあるため。結果は、ユニットテストを実行するときにしたことを示しました。時々私は(q)を解放し、エラーが発生したとき。だから私は落ち込んでいました。

その後、慎重に追跡し、pとqのreallocの発見後、ポインタアドレスが同じで終えました。しかし、時には同じではありません。

慎重に次の情報を確認してください。以下の情報を取得します。

       1. P点はスペースを拡大することを除いて十分な連続したメモリのreallocの現在のブロックの場合、アドレスPへのポインタを返します。この時間は、アドレスpとq点は同じです。

       2.電流Ifは、Qを返し、場所、新しいメモリ割り当て、Q、およびQにコピーコンテンツのpを見つけるために十分な長さ、十分な連続メモリブロックの長さではありません。そして、Pポイントをメモリ空間を削除します。

時には、これはreallocのは時々新しいメモリアドレスがない作り出すことを意味します。したがって、割り当ての完了時。我々は、Qに等しいPで決定する必要があります。それに応じて処理されます。

ビットは、ここで注目されるように、P = reallocの(P、2048)を避けるためにされているが、この文言。reallocの後、元々のメモリアドレスのpが欠落している、割り当ての失敗の原因になります。

おすすめ

転載: www.cnblogs.com/god-of-death/p/11334846.html