する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が欠落している、割り当ての失敗の原因になります。