【发布时间】:2014-08-07 20:28:08
【问题描述】:
发布模式工作正常,但调试模式给了我这个:
Executable_to_LinkDLL_to_FDDDLL.exe 中 0x0fc5edac (msvcr90d.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0xbaadf00d。
我正在使用 Octave 版本的 DLL。异常如下所示。我想知道是否有人遇到过这个问题。
这是我的代码中发生错误的地方(基于以下调用堆栈):
【问题讨论】:
-
我正在使用来自 Octave 的许多发行版 DLL...
-
@drescherjm 是否可以使用 Octave 库中的发布 DLL?
-
除非他们隔离分配/解除分配,否则您可能会遇到使用超过 1 个独立堆的问题。请记住,您不能在 1 个堆中分配内存并在不同的堆中释放它。
-
@user3853917 - 发布 DLL 可用于调试版本。如果发布 DLL 不尝试传递或接受处理动态分配的内存的对象,就会出现这种情况。我不知道 Octave,但如果 Octave API 使用简单的参数类型,例如 LONG、DWORD 等,那么问题不在于 DLL。
-
@user3853917 - 嗯,要查找的简单事情是查看 Octave 是否在 DLL 和您的应用程序之间来回传递 std::string。如果是这样,那么您不仅需要匹配构建类型,还必须使用编译 Octave 库时使用的相同编译器版本。这就是跨模块边界来回传递
std::string等对象的危险。
标签: c++ exception octave release-mode debug-mode