【发布时间】:2010-06-18 16:44:14
【问题描述】:
我的开发环境是[Windows 7;视觉工作室 2010; x86]。
我有一个很久以前为服务器 2003 构建的 dll。当我在我的项目中使用它并按照新/删除顺序使用类时,应用程序在删除调用期间崩溃。即使在 new 和 delete 之间没有任何其他调用,我也验证了相同的结果。当我用 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.
}
这是专有库,我不能发布构造函数和析构函数。
【问题讨论】:
-
请张贴代码。有一百万种可能出错的地方,如果不查看代码,任何一种都无法识别。
-
请向我们展示您使用 new 和 delete 的实际代码行。类的构造函数和析构函数也会有所帮助。
-
代码很简单 { CLogger * myLog = new CLogger();删除我的日志; // 这里发生崩溃 } { // 这里没有崩溃 CLogger MyLog; } { CLogger * myLog = (CLogger *) malloc (sizeof(CLogger));免费(我的日志); // 这不会崩溃。这是专有库,我不能发布构造函数和析构函数。
-
您忘记了第 42 行的毛巾操作员。
-
第三个区块很讨厌。
malloc和free只是记忆函数,例如operator new和operator delete;他们除了获取原始内存之外什么都不做。 “正确”的方式是:void* memory = malloc(sizeof(CLogger)); CLogger* myLog = new (memory) CLogger(); /* delete*/ myLog->~CLogger(); free(memory);
标签: c++ visual-c++ visual-studio-2010 crash new-operator