質問はタイトルにあります...検索しましたが何も見つかりませんでした。
編集:
これを説明する必要はあまりありませんが、私が言っていることは意味がないと人々が考えているため(そして私が間違った質問をしている)、ここに問題があります:
人々は実際に尋ねられた質問ではなく、すべての問題の「根本的な」原因に非常に興味を持っているように見えるので(それは明らかに物事がより良く解決するのに役立つので、それが解決するかどうか見てみましょう)、ここに問題があります:
Win32サブシステム以外のサブシステムにそのライブラリを使用できるように、NTDLL.dllに基づいてDランタイムライブラリを作成しようとしています。そのため、NTDLL.dllとのみリンクする必要があります。
はい、私は機能が「文書化されていない」ことを知っており、いつでも変更される可能性があります(20年後wcstombs
も同じことを行う100ドルを賭けても、それがまだ存在する場合)。はい、私は人々(特にマイクロソフト)がそのライブラリにリンクしている開発者を好まないことを知っています、そして私はおそらくここで正しいことについて批判されるでしょう。そして、はい、上記の2つのポイントは、Win32サブシステムの前に実行されるchkdskやdefragmentersのようなプログラムは、kernel32.dllやmsvcrt.dllのようなものとリンクすることが文字通り不可能であるため、そもそも作成されることさえ想定されていないことを意味します。まだNTネイティブの実行可能ファイルがあるので、開発者は、これらのステージが永遠に私たちの手の届かないところにあることを意図しているふりをする必要があります。
しかし、いいえ、ここにいる誰かが私に数千行のコードを貼り付けて、それらを調べて、失敗していないメモリ割り当てが変更しているソースコードによって拒否されている理由を理解するのを手伝ってくれるとは思えません。そのため、コミュニティではベストプラクティスとして知られていると思われますが、「根本的な」原因とは異なる問題について質問しました。
それでも意味がわからない場合は、以下にコメントを投稿してください。:)
編集2:
約8時間のデバッグの後、私はついに問題を発見しました。
与えられたポインタがであるかのように自動的に機能RtlReAllocateHeap()
しないことがわかりました。RtlAllocateHeap()
NULL