问题描述
你好!
所以最近我一直在努力使用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释放调用错误免费?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!