あなたの質問に対する実際の答えはar_ptr = arena_for_chunk(p);
、メモリをどこに解放するかを決定する内部データ構造であるということです。ただし、必要に応じて、そこを掘り続けることができます。p
これは、渡すのがほぼ確実である理由buffer
、またはそれに密接に関連する値が「正しくない」理由が見つかるまでです。ただし、街灯の下で落とした鍵を探すのと少し似ています。落とした場所で見つけようとするのではなく、そこの方がよく見えるからです。
標準ライブラリのコード、特に些細なプログラムを実行するたびに呼び出されるコードがクラッシュした場合、それは「不正な入力」が原因で発生する時間の99.9%です-関数内ではなく、関数を呼び出すコードを見てください(ただし問題の原因となった入力パラメーターを特定するために、問題が発生したことを振り返る価値があります。
実際の問題は、コードがfree()
不正なパラメーターで呼び出していることです。これにより、arena_for_chunk
が何か間違ったことをしていることになりますmem = 0xbffff11e
。上の行の値を考えると、それbuffer
は実際にはスタック上の値であり、解放されるべきではないと思います。