2011-07-19 40 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实例或指针(很有可能)是如何被使用的。