質問: CPPLIBRARY.WSetInt(WIntPtr); ``` ### 試したこと 調べてみたところ、「不正なメモリアクセスによるヒープ破損」が原因だと見当をつけたのですが、毎回同じ箇所で起こるわけではなく、C++やC#のどっちの処理でも発生したり、次に実行したときは同じ箇所で発生しなかったりします。 プログラム中は、Marshal.AllocHGlobalやMarshal.StructureToPtrで用意したIntPtr変数、またはC++CLI内でgcnewしたリストなどを引数としてC++のライブラリに渡す処理を数十個ほど行っているのでそのせいかなとは思うのですが、どうアプローチしていいかわかりません。 これが何故起こったり起こらなかったりするのか、解決するためにはどうしたらいいか、解決方法や原因をどう調べたらいいでしょうか。 ### 補足情報(言語/FW/ツール等のバージョンなど) 環境はWindows10のVSCommunity2017Ver15.2です。 C++CLIでの実際のエラーは、例えばこんなふうに構造体のリストをgcnewで作るとき等です ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/90024b779f899c9e43058218d2e4291d.png)
回答: とりあえずApplication Verifierを使ってみたらどうでしょうか? C++/CLIでどの程度有効か分かりませんが不適切なHeap操作した瞬間を検出できます。 提示されている画像のエラーはすでにヒープが壊されていて壊されたヒープを使用してメモリ確保をしようとしたからエラーになっているのだと思います。 その状態から実際にヒープを壊した場所を見つけるのは困難です。 Application Verifierを使用するとHeapを壊した瞬間にDebugBreakするのでどこで壊したかを特定できたりします。 今回のエラーのメッセージからヒープの管理領域が壊されたのだと思います。 であれば、Verifierで特定できる可能性が高いです。