![](/img/trans.png)
[英]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.