如何在删除期间摆脱伪造的_BLOCK_TYPE_IS_VALID断言失败

How to get rid of bogus _BLOCK_TYPE_IS_VALID assertion failure during delete?

本文关键字:TYPE BLOCK IS VALID 失败 断言 伪造 删除      更新时间:2023-10-16

当我在调试模式下构建visual 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,所以它失败了。我迫切需要在我的软件中识别"真正的"内存损坏,所以我开始使用调试构建,希望它可以捕获损坏,但它只是制造虚假的噪音,并且不会让我继续超出该声明。一个人不能写一个删除语句吗?在我被炒之前请帮帮我。

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