我正在使用 VS2012 并构建我的 java 应用程序使用的四个 dll。这 4 个 dll 的调试版本工作正常,发布版本使 java 应用程序崩溃。我收到以下错误:
** dbip.exe 中 0x6DEC3D05 (jvm.dll) 的第一次机会异常:0xC0000005:访问冲突写入位置 0x012C0980。“dbip.exe”(Win32):已加载“C:\Windows\System32\wintrust.dll”。无法找到或打开 PDB 文件。
STATUS_STACK_BUFFER_OVERRUN 遇到**
以下是我的示例代码: 在我的 .h 代码中,我有:
class _CABInterface : public CInterface
{
public:
virtual ~CABInterface(void);
static CABInterface* GetABInterface();
private:
CABInterface(void);
static CABInterface* m_pABInterface;
....
}
在我的 .cpp 代码中:
CABInterface::CABInterface()
{//line A
init(); //line B
}
CABInterface* CABInterface::GetABInterface()
{//line C
if (m_pABInterface == NULL)
{
m_pABInterface = new CABInterface();
}
return m_pABInterface;
}
在我的另一个 .cpp 文件中,我调用 GetABInterface() 如下:
CInterface* pJtagInterface = CABInterface::GetABInterface(); //line D
我在 D 行设置断点;如果我使用调试版本,从 D 行转到 C 行,然后转到 A 行、B 行。一切都按我的预期工作;
但是,当我使用发布版本时,从 D 行直接跳转到 A 行。 C 行永远没有机会执行;
奇怪的是在执行 B 行之后,它又回到 A 行,内存变得混乱。
有人知道我做错了什么吗?我以为是因为我的编译设置,但是哪一个?提前致谢!!!
歌曲