[英]Debug Assertion Failed on Linked List Destructor (C++ Visual Studio)
[英]Visual Studio C++ : Debug Assertion Failed
我最近尝试创建一个程序,该程序可以读取ODBC数据库,然后使用CRecordset类将条目写入Excel文件中,该程序可以完美地编译,但是问题出在执行中...
第一个错误:
调试断言失败!
程式:C:\\ Windows \\ system32 \\ mfc140ud.dll
文件:f:\\ dd \\ vctools \\ vc7libs \\ ship \\ atlmfc \\ include \\ afxwin1.inl
行:24
第二个错误:
调试断言失败!
程式:C:\\ Windows \\ system32 \\ mfc140ud.dll
文件:f:\\ dd \\ vctools \\ vc7libs \\ ship \\ atlmfc \\ src \\ mfc \\ dbcore.cpp
线:3312
这两个错误指向mfc140ud.dll文件,它不是缺少的文件,所以这不是问题。
这是引发异常的函数:
void parseDB(CRecordset &rs, const CString &SqlString, CString strOut) {
std::cout << "test2";
rs.Open(CRecordset::snapshot, SqlString, CRecordset::readOnly);
std::string entry;
std::fstream file;
std::cout << "test3";
while(!rs.IsEOF()) {
std::cout << "test4";
rs.GetFieldValue((short)0, strOut);
CT2CA pszConvertedAnsiString = strOut;
entry = pszConvertedAnsiString;
writeXLSX(entry.c_str(), file);
rs.MoveNext();
}
rs.Close();
}
“ std :: cout <<” test“在这里用于调试,并且我的程序在显示“ test2”之后立即生成这些错误,因此我推断出该错误来自“ Open”行。
这是我初始化CRecordset的方法:
CString sDsn;
CDatabase db;
CRecordset rs(&db);
CString strOut;
CString SqlString;
然后,在切换情况下使用CALL SQL函数:
switch (sequence) {
case 1:
SqlString = "CALL GETCUSNAME(AGENTS)";
break;
case 2:
SqlString = "CALL GETCUSNAME(CLIENT)";
break;
default:
AfxMessageBox(_T("Wrong entry!"));
}
我在许多站点上搜索,但找不到答案,这就是为什么在这里问一个问题,在此先感谢您。
第一个断言来自AfxGetResourceHandle
抱怨说它没有正确设置。
通常会发生这种情况,因为您没有在应用程序开始时调用AfxWinInit
(如果您有控制台应用程序,并且没有使用MFC向导进行设置,则很可能是这种情况),或者您正在编写从非MFC代码调用的MFC DLL,而您没有添加AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
在每个外部可见功能的开始。
我相信第二个原因是因为MFC要求您将CALL查询用大括号括起来,例如: {CALL GETCUSNAME(AGENTS)}
。 否则,将无法识别该调用,并且代码执行将输入不应采用的路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.