我有一个例外是在将静态局部变量初始化为类实例时使用的dll。 从类构造函数返回时发生异常。
我发布的例外是:
ConsoleApplication1.exe:0xC0000005:访问冲突读取位置0x00000000BA3529A2。
在调试中我得到一个调试断言:
Debug Assertion失败!
程序:E:\ Sandbox \ ConsoleApplication1 \ x64 \ Debug \ ConsoleApplication1.exe
文件:f:\ dd \ vctools \ crt \ crtw32 \ misc \ dbgheap.c
行:1516表达式:_CrtIsValidHeapPointer(pUserData)
这是失败的功能(CImg库的一部分非常棒!):
static const CImg<Tuchar>& jet_LUT256() {
static CImg<Tuchar> colormap; // <--- static local variable decleration
// exception here. after returnning from the CImg constructor :-(
cimg::mutex(8);
if (!colormap) {
colormap.assign(1,4,1,3,0);
colormap[2] = colormap[3] = colormap[5] = colormap[6] = colormap[8] = colormap[9] = 255;
colormap.resize(1,256,1,3,3);
}
cimg::mutex(8,0);
return colormap;
}
当项目作为exe运行时,一切正常。 当我把它变成dll时问题就开始了,并在另一个exe中使用它。
答案 0 :(得分:0)
解决。
发现问题是我使用了/ NOENTRY属性(大NONO!)
(因为当我将它从exe转换为dll时,我的链接错误与未解析的函数mainCRTStartup
)
从属性中删除了/ NOENTRY-> Linker-&gt; Advanced并且错误消失了。