さまざまな理由から、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
なぜですか? 違いがあるのではないかと思いますが、それが何であるかはわかりません。
ありがとうございました!