私は様々な理由から、CランタイムからWindowsヒープAPIを使用するものに移植しようとしているというコードを持っています。私は、問題が発生しました:私はHeapAlloc
/HeapReAlloc
/HeapFree
からmalloc
/calloc
/realloc
/free
コール(ハンドル用GetProcessHeap
付き)をリダイレクトする場合は、メモリが正しく割り当てられているようだ(何の悪いポインタが返されず、例外はスローされません)しかし、私が移植しているライブラリは何らかの理由で "メモリを割り当てられませんでした"と言っています。mallocとHeapAllocの間には基本的な違いがありますか(移植性を除いて)?
私はMicrosoft CRT(下のHeap APIを使用しています)と別の会社のランタイムライブラリ(グローバルメモリAPIを使用しています)の両方でこれを試しました。これらの両方のmallocはライブラリとうまく機能しますが、何らかの理由でHeap APIを直接使用すると機能しません。
割り当てが大きすぎない(> = 0x7FFF8バイト以上)ことを確認しましたが、そうではありません。
私が考えることができる唯一の問題は、メモリアライメントです。その場合ですか?それ以外のヒープAPIと私が気づいていないCRTメモリAPIの間には根本的な違いがありますか?
もしそうなら、それは何ですか?そしてもしそうでなければ、なぜスタティックマイクロソフトCRT(ビジュアルスタジオに付属)はHeapAlloc
を呼び出す前にmalloc
/calloc
でいくつかの追加ステップを取るのですか?私は違いがあると思っていますが、私はそれが何であるか考えることができません。
ありがとうございました!
HeapAllocは、0のサイズのポインタに対してもメモリを割り当てません。ここではmallocが使用されます。また、HeapAllocはmallocを呼び出せませんでした。新しいハンドラが問題を修正できなかった場合は、循環呼び出しにつながります。 – Necrolis
私は誤字がありました。それを固定しました、ありがとう。 – Mehrdad