我最近将我的操作系统从 Windows XP 升级到了 Windows 7 SP1 64 位。我们正在使用 Visual Studio 2008 Professional Edition 和 Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production。
当我尝试执行此代码时,出现以下异常
尝试 { CDatabase *pDatabase = CDatabaseConnection::getDatabaseConnectionProcessLog();
ORSProcessLog rsProcessLog(pDatabase);
CString strFilter = _T("SELECT PROCESS_ID, MESSAGE FROM OP_PROCESS_LOG");
rsProcessLog.SetRowsetSize(1);
if( !rsProcessLog.Open(CRecordset::dynaset, strFilter, CRecordset::appendOnly) )
return;
if( !rsProcessLog.CanAppend() )
return;
rsProcessLog.AddNew();
rsProcessLog.m_PROCESS_ID = gcsProcessID;
rsProcessLog.m_MESSAGE = csMessageA;
rsProcessLog.Update();
rsProcessLog.Close();
}
catch ( CDBException* pEx )
{
bException = true;
pEx->GetErrorMessage(szCause, 255);
}
catch( CException* pEx )
{
bException = true;
pEx->GetErrorMessage(szCause, 255);
}
其中 rsProcessLog 是使用成功连接的数据库指针 pDatabase 的 CRecordset 对象
在 32 位调试版本中,我在 rsProcessLog.Close(); 处收到一个消息框;带有以下文本 调试错误
程序:......\Test.exe
检测到堆损坏:在 0x0087F628 的正常块 (#506) 之后。CRT 检测到应用程序在堆缓冲区结束后写入内存。
在 f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dbcore.cpp(2626) 处分配的内存
(请重试调试应用程序)
在 32 位发布版本中,我在 rsProcessLog.Close(); 处收到一个消息框;使用以下文本 Windows 在 Test.exe 中触发了断点
这可能是由于堆损坏,这表明 Test.exe 或其已加载的任何 DLLS 中存在错误。
这也可能是由于用户在 Test.exe 具有焦点时按 F12。
输出窗口可能有更多诊断信息。
上面的代码是 Windows XP 中的工作代码,其余环境保持不变,它继续在 Windows XP 中运行,但在 Windows 7 中不运行。任何帮助将不胜感激。