私のプログラムでは、std::list
オブジェクトへのポインターがあり、そのように割り当てられています。
d_list_p = new std::list<some_type*>();
その後、プログラムの後半で、そのように削除します。
d_list_p->clear();
delete d_list_p;
何らかの理由で、delete ステートメントで Windows ブレークポイントがトリガーされます。delete ステートメントでブレークすると、リストが存在し、サイズが 0 であることがわかります。また、エラーがスローされる場合に備えて、リストに要素を追加することはありません (と思います)。
コードは、VS2005 用の MS VC++ コンパイラでコンパイルされています。
エラー メッセージには、Windows がメモリの破損を示すブレークポイントをトリガーしたことが示されています。スタック トレースには、次のように記載されています。
ntdll.dll!DbgBreakPoint()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!RtlpNtMakeTemporaryKey() + 0x6735 bytes
ntdll.dll!RtlpNtMakeTemporaryKey() + 0x6b72 bytes
ntdll.dll!RtlpNtMakeTemporaryKey() + 0x7d5a bytes
ntdll.dll!LdrAlternateResourcesEnabled() + 0x33bd bytes
ntdll.dll!RtlpUnWaitCriticalSection() + 0x65b bytes
msvcr80.dll!free() + 0xcd bytes
FM_Access_Library_NET.dll!std::list<FM_Access_Library::Logger_Callbacks *,std::allocator<FM_Access_Library::Logger_Callbacks *> >::`scalar deleting destructor'() + 0x20 bytes C++
この削除ステートメントは、.NET DLL に組み込まれている C++ コードに含まれているため、プログラムは混合モードで実行されていることに注意してください。