次の形式で、単純なリンク リスト ベースのメモリ マネージャーを作成しています。
...Header|Block|Header|Block... 使用済みおよび空きリスト付き。
realloc() 関数がブロックのサイズを縮小するように要求された場合、末尾のバイトの一部を新しく作成されたブロックのヘッダーで上書きしても問題ありませんか? 私が読んだドキュメントは、これが「未定義の動作」であることを示唆していますが、アプリケーションはまだそこにあるデータに依存していますか?
ほとんどの場合、未定義の動作に関するコメントは次のようになりました。
このような仕様は、 realloc の実装で末尾のバイトにヘッダーを挿入できるようにするために正確に存在します。これが未定義の動作であるということは、アプリケーションが (概念的にはなくなった) バイトから読み取ろうとすると、ヘッダーが読み取られ、アプリケーションにはゴミとして表示されることを意味します。書き込みさえすると、ヘッダーが殺されます-したがって、アプリケーションはそれを行うべきではありません。
もちろん。再割り当てされたため、アプリによって解放され、マネージャーに属しています。新しいポインターでそれを壊し始めるのは普通のことです。