【发布时间】:2011-09-08 16:53:37
【问题描述】:
在我的程序中,我有一个指向 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 中的,因此程序是在混合模式下运行的。
【问题讨论】:
-
您可能是(并且可能是)正在破坏内存的其他东西。
-
嗯,你有内存损坏的地方。这里还不足以知道在哪里。
标签: c++ memory-management stdlist