我有一个主要用于UI的C#程序,它使用c ++ dll作为逻辑。
最近我将编译器从平台工具集VS 2012(v110)切换到VS 2017(v141),从那时起我每次尝试发布std :: collection时都会收到异常(没有描述)。
示例:
{
std::string str = "";
}
我尝试使用std :: map,std :: stack和std :: list,所有这些都在函数_Deallocate中的文件xmemory0中获得异常。当我创建一个简单的c ++控制台应用程序时,这不会发生,所以我猜它在c#应用程序中使用c ++有一些东西。
使用自定义Allocater for std :: list似乎可以工作,但我想知道升级编译器导致这样一个问题的原因。
答案 0 :(得分:0)
最终我找到了原因,在2012年到2017年之间,他们添加了一个新的删除操作符。因此,为了分配字符串,它使用了我们的新运算符,并且为了解除分配它使用标准删除运算符。
(不要问我们为什么要覆盖那些操作员(不是我的决定)......)