在我的程序中,我有一个指向std::list
对象的指针,它是这样分配的。
d_list_p = new std::list<some_type*>();
然后稍后在我的程序中我像这样删除它。
d_list_p->clear();
delete d_list_p;
出于某种原因,我在删除语句上触发了 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++
可能值得一提的是,这个删除语句是用 C++ 代码编写的,该代码被构建到 .NET DLL 中,因此程序以混合模式运行。