调用QDomElement :: text()函数时Visual Studio 2008“Debug Assertion Failed”消息

时间:2011-07-19 16:12:20

标签: c++ visual-studio-2008 qt qtxml

我已经包含了源,错误和堆栈跟踪。我该如何解决这个问题?我需要关于如何继续这个

的指针(解释)

源代码:

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中触发了断点。

     

这可能是由于堆的损坏,这表明存在错误   tests.exe或它加载的任何DLL。

     

这也可能是因为用户在test.exe的情况下按F12   对焦。

     

输出窗口可能包含更多诊断信息。   “

当我点击继续 - 我进一步收到消息 -

  

程序:... n \ tests \ Release \ 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

2 个答案:

答案 0 :(得分:1)

我在发布版本中运行该程序,但是链接到调试构建库(Qtcored.lib)。那就是问题所在。

答案 1 :(得分:0)

这不是堆损坏。你正在删除一个糟糕的qstring。找出qstring实例或指针(最有可能)在它实际上是坏的时候是如何使用的。