C++ アプリで COM を介して呼び出している C# ライブラリ モジュールでヒープ破損エラーが発生します。具体的なエラーは次のとおりです。
ヒープ: 解放された後、4b61be8 で変更されたヒープ ブロック 4b61bb8 を解放し
ます...
これは、ヒープの破損が原因である可能性があり、[app].exe またはそれがロードした DLL のバグを示しています。
コール スタックのトップは次のとおりです。
CustomMarshalers.dll!System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext() + 0x168 bytes
私の理解では、.NET はメモリの問題を軽減するものであり、メモリの問題を修正不可能にするものではないということでした。それでも、メモリエラーを引き起こすために何をしているのか、またはそれを修正しようとしている方法は考えられません。特定のモジュールは、Microsoft.VisualStudio.VCProjectEngine .NET コンポーネントを使用して、非常に単純な反復子で VC プロジェクト ファイルを反復処理しています。以前の約 100 回の呼び出しに成功した後、VCProject フィルター (フォルダー) でファイルを反復処理しているときに、foreach ステートメントで中断しています。壊れている実際のコードは次のとおりです。
IVCCollection CollectionFiles = (IVCCollection)FolderInProject.Files;
foreach (VCFile File in CollectionFiles)
{
[...]
}
どうすればこれをデバッグできますか?
アップデート:
純粋な C# コンソール アプリ (COM やネイティブ コードを含まない) から if を呼び出すと、次のようになります。
タイプ 'System.AccessViolationException' の未処理の例外が [component].dll で発生しました
追加情報: 保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。
これをデバッグする方法はまだわかりません。明らかに、どこかでメモリ エラーが発生しています...しかし、メモリ モデルが公開されていない純粋なマネージ コードでそれを追跡するにはどうすればよいでしょうか?