问题:在第265次运行到t_db->Open("EntityTable");时出现First-chance exception in debug.exe (NTDLL.DLL): 0xC00000FD: Stack Overflow. 什么问题? 以下是源代码:
CDaoDatabase g_db;
CreateDataTables(char *outfilename)
{
g_db.Create(mdbFilename);
//...
}
BOOL Judge_Fence()
{
//...
CDaoTableDef *t_db = new CDaoTableDef(&g_db);
t_db->Open("EntityTable"); CDaoRecordset *p_Set = new CDaoRecordset(&g_db);
p_Set->Open(t_db, dbOpenDynaset, 0);
if ( p_Set->GetRecordCount()<1 )
{
p_Set->Close(); delete p_Set;
t_db->Close(); delete t_db;
return FALSE;
} p_Set->MoveFirst();
while (!p_Set->IsEOF())
{
//...
p_Set->MoveNext();
} p_Set->Close();
t_db->Close(); delete p_Set;
delete t_db; return TRUE;
}
CDaoDatabase g_db;
CreateDataTables(char *outfilename)
{
g_db.Create(mdbFilename);
//...
}
BOOL Judge_Fence()
{
//...
CDaoTableDef *t_db = new CDaoTableDef(&g_db);
t_db->Open("EntityTable"); CDaoRecordset *p_Set = new CDaoRecordset(&g_db);
p_Set->Open(t_db, dbOpenDynaset, 0);
if ( p_Set->GetRecordCount()<1 )
{
p_Set->Close(); delete p_Set;
t_db->Close(); delete t_db;
return FALSE;
} p_Set->MoveFirst();
while (!p_Set->IsEOF())
{
//...
p_Set->MoveNext();
} p_Set->Close();
t_db->Close(); delete p_Set;
delete t_db; return TRUE;
}
解决方案 »
- TVN_SELCHANGING|TVN_SELCHANGED//不是点击到子节点上才行吗?怎么点击树控件白色区域也提作用?
- vc++与excel的混合编程,急救!
- cwinapp中的 initapplication 与 initinstance 有何区别呢?
- 如何加载自己的光标图标?
- 关于dll与exe 通信问题,高手指点
- WebBrowser控件在DLL里面使用问题
- 讨论:MSN<=>OICQ
- 请问:open函数的第二第三个参数提供用户名和用户口令,而为什么要将用户名和口令放在第一个参数中呢??
- 如能帮助,一定重谢!!!
- vc安装成功 但运行不了 怎么回事的?
- dll 加载顺序的问题?
- 请问一个串口通信的问题?
while (!p_Set->IsEOF())
{
//...
p_Set->MoveNext();
}
循环里做了什么?
BOOL Judge_Fence()是一个满足递归的条件判断.
怎么解决呢?
{
BOOL RET = Judge_Fence();
if (!ret)
{
//..
CALCUTE();
} //...
}
{
//...
BOOL ret = TRUE;
CDaoTableDef *t_db = new CDaoTableDef(&g_db);
t_db->Open("EntityTable"); CDaoRecordset *p_Set = new CDaoRecordset(&g_db);
p_Set->Open(t_db, dbOpenDynaset, 0);
if ( p_Set->GetRecordCount() <1 )
{
p_Set->Close(); delete p_Set;
t_db->Close(); delete t_db;
return FALSE;
} p_Set->MoveFirst();
while (!p_Set->IsEOF())
{
//...
p_Set->MoveNext();
if (...)
ret = FALSE;
} p_Set->Close();
t_db->Close(); delete p_Set;
delete t_db; return ret;
}
{
do
{
// 处理工作:
}while( !Judge_Fence() ); // 收尾工作:
}
{
while( !Judge_Fence() )
{
// 处理工作:
} // 收尾工作:
}