本文介绍了(调试CRT)C ++ 17释放调用错误免费?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好!


所以最近我一直在努力使用C ++ 17标准运行应用程序。其中一个项目是一个DLL,它使用一些包装类来分配一些线程。它们是Win32线程,而不是STL线程。


应用程序的调试版本具有覆盖new,malloc等的自定义alloc和dealloc函数,它们也使用CRT调试库,这是有用的用于追踪泄漏等。如果我将DLL项目切换到C ++ 14,调试
版本运行完全正常,它似乎在线程包装类上调用delete时进行适当的释放。


但是,如果我将其切换到C ++ 17,而不是执行标准的免费操作,它会尝试执行对齐的自由和崩溃。


发布版本没有此问题,这个问题似乎只存在于这个关于线程的DLL中,并且只存在于C ++ 17中。


代码基本上是这样的:



SomeThreadClass * pMyThread = new SomeThreadClass;



和deallocation



删除pMyThread;



显然它还有更多,但是就分配和解除分配而言,这就是它的全部内容。



当我为C ++ 14设置项目时,似乎根据"外部守则"堆栈跟踪它似乎调用了一些CRT自由函数,而使用C ++ 17它似乎显示标量删除函数,看起来像:


delete(void * block,std) :: align_val_t __formal)第32行


不幸的是,我无法真正共享任何实际的代码,但是从C ++ 14切换到C ++时会发生一些奇怪的事情。 17。



我正在使用带有Windows SDK版本7.0的v141_xp工具集运行Visual Studio 2017。



工作与不工作的唯一区别是C ++语言标准。



关于发生了什么的任何想法?


解决方案


这篇关于(调试CRT)C ++ 17释放调用错误免费?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 12:54