Zhi*_*aas 2 c++ crash visual-studio-2010 new-operator visual-c++
我的开发环境是[Windows 7; 视觉工作室2010; 86].
我有一个为服务器2003长时间回来构建的DLL.当我在我的项目中使用它并按照新/删除序列使用类时,应用程序在删除调用期间崩溃.即使没有新的和删除之间的任何其他调用我也验证了相同.当我用malloc/free替换new/delete时,没有崩溃.如果我只是声明一个没有new的类的实例,则退出作用域时不会发生崩溃.
什么可能出错?这是我们公司的内部库,所以我无法命名它和其他类似的东西.
附加信息: 要首先使用此库,我必须关闭VS功能"将wchar_t视为内置类型".
代码很简单
{
CLogger * myLog = new CLogger();
delete myLog; // Crash happens here
}
{ // No crash here
CLogger MyLog;
}
{
CLogger * myLog = (CLogger *) malloc (sizeof(CLogger));
free (myLog); // This does not crash.
}
Run Code Online (Sandbox Code Playgroud)
这是专有的库,我不能发布构造函数和析构函数.
delete不只是释放内存:它之前也调用了析构函数.这意味着该类的析构函数中必定存在不良内容.
如果在析构函数中发生未捕获的异常,则整个进程退出(*).如下面评论(感谢良好的反馈)这是过度简化这里是一个很好的链接更多细节: 从析构函数中抛出异常
我建议你放一个
try {} catch (std::exception& e){} catch(...) {}
Run Code Online (Sandbox Code Playgroud)
在析构函数内部并注销正在发生的事情,或者更好地让它通过调试器,并选择在抛出异常的位置停止.
然后应该很容易识别出不同的东西.只是猜测一下,它可能是一些注册表访问或文件访问权限,其中一些更改从服务器2003引入到Windows 7.
归档时间: |
|
查看次数: |
2673 次 |
最近记录: |