【发布时间】:2012-09-20 08:49:48
【问题描述】:
我创建了一个常规 dll,其中我有一个方法 GetRecord 为 RecordInfo 结构分配内存。
struct RecordInfo{
// Some Data member
}
BOOL GetRecord(RecordInfo *& pRecordInfo)
{
// Allocate RecordInfo, fill data and return as out paramter.
}
现在我从 MFC 应用程序和完成我的工作后访问这个 dll。我使用删除在客户端发布 RecordInfo。
delete pRecordInfo;
在发布模式下没有问题,但是在调试模式下应用程序显示断言失败。有人可以解释这种行为背后的原因吗?
【问题讨论】:
-
您似乎有堆损坏。您可以尝试的一件事是在 Visual Studio 中启用第一次机会异常,看看您是否可以找到损坏的原因。
-
请注意,调试构建实际上是帮助您解决诊断基础设施和相关的断言失败;相反,发布版本默默地失败了。 (一般来说,在迁移到发布版本之前,您应该确保调试版本运行良好。)
-
您不能从一个分配器分配内存,然后将其释放给另一个。