2011-10-06 50 views
1

当我建立我的Visual C++项目在调试模式下,只需用代码如何在删除期间删除伪造的_BLOCK_TYPE_IS_VALID断言失败?

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

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

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

的TEnviron是从不同的dll比我的主程序,因此失败。我迫切需要在我的软件中识别出“真实”的内存损坏,所以我开始使用调试版本,希望它能够消除腐败现象,但这只是伪造噪声,并且不会让我继续超越声明。男人不能写删除语句吗?在我被解雇之前请帮忙。

回答

1

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