2

最後の手段としてここに投稿します。私は完全に立ち往生しており、これをどこに持っていくべきかわかりません。この質問では、答えではなく方向性を探しています。

私は、実際には非常に一般的な課題のように見える在宅ワークの課題を持っています。質問は11 ページにあります。これは私の課題ではありませんが、Google で見つけたもので、私の課題と非常によく似ています。

私のインストラクターは、私たちが見る必要がある関連情報はヘッダービットであるというガイダンスを与えました.

以下を実行しているとします。free(0x400b010)

0x400b010が含まれています0x400b601c

この 16 進数を 2 進数に分割すると、特に最後のダブル ワードでは、次のようになります。

0x1c = 0001 1100

全体:

0x400b601c = 0100 0000 0000 1011 0110 0000 0001 1100

私が理解できることから、1cこれはこのメモリがすでに解放されていることを示しています。最後のビットが 0 であるためです。この場合、free の動作は未定義になります。

しかし、私の電車は正確ですか?私はこれを正しい方向に持っていますか?

4

1 に答える 1

3

またはその親族の 1 つfree()から取得したポインターを常に渡す必要があります。mallocこれらのポインターをどのように使用するかについて少し考えてみてください。

自問する質問:

  • 返されるポインターmallocはヘッダーを指すことができますか? フッターに?なぜですか、そうでないのですか?
  • 上記のヘッダーの内容を見ていますか?
  • ヘッダーはどこにありますか?

ところで--リンクされたドキュメントは、ヒープアロケーターが機能するいくつかの方法のうちの1つだけを説明しています。

于 2009-08-15T20:37:33.140 に答える