2011-07-19 82 views
0

我已經包含源代碼,錯誤和堆棧跟蹤。我該如何解決這個問題?我需要如何對此在調用QDomElement :: text()函數時Visual Studio 2008「調試斷言失敗」消息

源代碼進行指針(說明):

QFile xmlInputFile(".\\gatewayipmonitor.xml"); 
xmlInputFile.open(QIODevice::ReadOnly); 

QByteArray xmlData(xmlInputFile.readAll()); 

QDomDocument doc; 
doc.setContent(xmlData); 

QDomElement docEl(doc.documentElement()); 
const QString tagName(docEl.tagName()); 

docEl.text(); 

在執行最後一行 - 我得到

Windows已經引發了測試斷點的消息。可執行程序。

這可能是由於堆的損壞,這表明 tests.exe或它已加載的任何DLL中存在一個錯誤。

這也可能是由於用戶按F12而tests.exe具有 焦點。

輸出窗口可能有更多診斷信息。 「

當我點擊繼續 - 我還得到消息 -

計劃:... N \測試\發佈\ tests.exe文件: F:\ DD \ vctools \ crt_bld \ self_x86 \ CRT \ dbgheap.c

表達式:_CrtIdValidHeapPointer(pUserData)

堆棧跟蹤:

msvcr90d.dll!_free_dbg_nolock(void * pUserData=0x00a5f348, int nBlockUse=1) Line 1317 + 0x30 bytes C++ 
msvcr90d.dll!_free_dbg(void * pUserData=0x00a5f348, int nBlockUse=1) Line 1258 + 0xd bytes C++ 
msvcr90d.dll!free(void * pUserData=0x00a5f348) Line 49 + 0xb bytes C++ 
QtCored4.dll!qFree(void * ptr=0x00a5f348) Line 60 + 0xa bytes C++ 
QtCored4.dll!QString::free(QString::Data * d=0x00a5f348) Line 1185 + 0x9 bytes C++ 
QtCored4.dll!QString::~QString() Line 883 + 0x23 bytes C++ 
tests.exe!test_GatewayIpMonitor() Line 321 + 0xc bytes C++ 
tests.exe!main() Line 343 C++ 
tests.exe!__tmainCRTStartup() Line 586 + 0x17 bytes C 

回答

1

我在發佈版本中運行程序,但鏈接到調試構建庫(Qtcored.lib)。這是問題。

0

它不是堆腐敗。你正在刪除一個糟糕的qstring。當它真的很糟糕的時候,找出那個qstring實例或指針(很有可能)是如何被使用的。