请问谁遇到过CDatabase Close崩溃的问题

zhangshengyu 2009-01-12 05:28:19
我在一个MFC DLL里面用到了这个数据库类,主程序退出的时候就崩溃了。堆栈位于CDatabase::Close
这个close无论我是在析构函数中调用还是在exitinstance里面调用还是干脆不调用让系统自动释放都会导致程序崩溃。
是什么原因导致的?
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fantuan 2009-01-15
  • 打赏
  • 举报
回复
初步估计应该是主程序跟线程退出时的先后顺序有关,跟close无关
有可能CDatabase已销毁了,又被执行某调用。建议把代码粘出来 。
zhangshengyu 2009-01-13
  • 打赏
  • 举报
回复
没有重复,我的代码很简单,即使完全不调用close系统也会自动调用,崩溃。
全局的CDatabase 变量。
CA_HA_M 2009-01-12
  • 打赏
  • 举报
回复
重复close就会导致崩溃,看看是不是已经关闭了之后又关闭了一次
zhangshengyu 2009-01-12
  • 打赏
  • 举报
回复
如果我没调用close,退出时是doexit CRT函数调用的,系统自动释放。

void CDatabase::Close()
{
ASSERT_VALID(this);

// Close any open recordsets
AfxLockGlobals(CRIT_ODBC);
TRY
{
while (!m_listRecordsets.IsEmpty())
{
CRecordset* pSet = (CRecordset*)m_listRecordsets.GetHead();
pSet->Close(); // will implicitly remove from list
pSet->m_pDatabase = NULL;
}
}
CATCH_ALL(e)
{
AfxUnlockGlobals(CRIT_ODBC);
THROW_LAST();
}
END_CATCH_ALL
AfxUnlockGlobals(CRIT_ODBC);

if (m_hdbc != SQL_NULL_HDBC)
{
RETCODE nRetCode;
AFX_SQL_SYNC(::SQLDisconnect(m_hdbc)); //这里就会崩溃
AFX_SQL_SYNC(::SQLFreeConnect(m_hdbc));
m_hdbc = SQL_NULL_HDBC;

_AFX_DB_STATE* pDbState = _afxDbState;

AfxLockGlobals(CRIT_ODBC);
ASSERT(pDbState->m_nAllocatedConnections != 0);
pDbState->m_nAllocatedConnections--;
AfxUnlockGlobals(CRIT_ODBC);
}
}
oyljerry 2009-01-12
  • 打赏
  • 举报
回复
先检查一下崩溃的地方的call stack等,看什么触发了...

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧