删除过程中如何摆脱伪造的_BLOCK_TYPE_IS_VALID断言失败?

时间:2011-10-06 17:42:01

标签: c++ block

当我在调试模式下构建可视化C ++项目时,只需要两行代码

TEnviron * fk = new TEnviron();
delete fk;

它从_CrtIsValidHeapPointer抛出一个断言失败错误_BLOCK_TYPE_IS_VALID。对它的评论说

Verify pointer is not only a valid pointer but also that it is from the 'local' heap.

TEnviron来自与我的主程序不同的dll,因此它失败了。我迫切需要在我的软件中识别出“真正的”内存损坏,所以我开始使用调试版本,希望它可以捕获损坏,但它只是在制造虚假的噪音,并且不会让我继续声明。一个人不能写一个删除声明吗?在被解雇之前请帮忙。

1 个答案:

答案 0 :(得分:1)

如果我们谈论MSVC,我个人创建并删除仅在该DLL中从DLL导入的类的对象。所以它们总是存在于DLL的堆中,而不是主堆中。我使用一对静态函数create / destroy来做到这一点。这样我就可以安全地从任何地方创建和删除对象。也许这不是最好的解决方案,但它解决了你的问题。