さまざまな理由から、C ランタイムから Windows ヒープ API を使用するランタイムに移植しようとしているコードがあります。問題が発生しました: malloc/ calloc/ realloc/free呼び出しをHeapAlloc/ HeapReAlloc/ HeapFree(GetProcessHeapハンドル用) にリダイレクトすると、メモリは正しく割り当てられているように見えます (不良ポインターが返されず、例外もスローされません)。移植すると、何らかの理由で「メモリの割り当てに失敗しました」と表示されます。
Microsoft CRT (下でヒープ API を使用) と別の会社のランタイム ライブラリ (下でグローバル メモリ API を使用) の両方でこれを試しました。これらの両方の malloc はライブラリでうまく機能しますが、何らかの理由で、ヒープ API を直接使用すると機能しません。
割り当てが大きすぎないこと (>= 0x7FFF8 バイト) を確認しましたが、そうではありません。
私が考えることができる唯一の問題は、メモリの配置です。そうですか?またはそれ以外に、私が認識していないヒープ API と CRT メモリ API の根本的な違いはありますか?
もしそうなら、それは何ですか?そうでない場合、静的なMicrosoft CRT (Visual Studio に含まれています) がmalloc/callocを呼び出す前に追加の手順を実行するのはHeapAllocなぜですか? 違いがあるのではないかと思いますが、それが何であるかはわかりません。
ありがとうございました!