QtXmlPatterns类中的内存泄漏

时间:2013-11-07 15:40:39

标签: qt memory-leaks valgrind

我正在开发一个修改大量xml文件的控制台Qt应用程序。我注意到我的应用程序开始消耗越来越多的内存。例如,它已经工作了一个小时,内存消耗从300 Mb增加到700 Mb。

我在Qt Creator Analyze模式中使用valgrind来获取正在发生的事情。 valgrind日志中包含以下消息:

155,568 (72 direct, 155,496 indirect) bytes in 9 blocks are definitely lost in loss record 1,104 of 1,107
  in XmlValidator::validateXsd(QString const&, QString const&, QXmlSchema*) in xml_validator.cpp:302
  1: operator new(unsigned long) in /builddir/build/BUILD/valgrind-3.6.0/coregrind/m_replacemalloc/vg_replace_malloc.c:261
  2: /usr/lib64/libQtXmlPatterns.so.4.6.2
  3: /usr/lib64/libQtXmlPatterns.so.4.6.2
  4: /usr/lib64/libQtXmlPatterns.so.4.6.2
  5: /usr/lib64/libQtXmlPatterns.so.4.6.2
  6: /usr/lib64/libQtXmlPatterns.so.4.6.2
  7: /usr/lib64/libQtXmlPatterns.so.4.6.2
  8: /usr/lib64/libQtXmlPatterns.so.4.6.2
  9: QXmlSchema::load(QByteArray const&, QUrl const&) in /usr/lib64/libQtXmlPatterns.so.4.6.2
...

正如我所看到的,所有这些消息都指出QXmlShema::load函数中存在错误。我在我的一个函数中使用QXmlShema对象,它是一个本地对象,应该在函数结束后销毁。

QtXmlPatterns类确实有问题,或者我不正确理解valgring日志?

- 更新 -

以下是我的代码的一部分:

bool Validator::validateXsd(const QString &xsd, const QString &uri)
{
    QXmlSchema schema;
    return this->validateXsd(xsd, uri, &schema);
}

bool Validator::validateXsd(const QString &xsd, const QString &uri, QXmlSchema *schema)
{
    if (schema == NULL)
    {
        return false;
    }

    bool valid = schema->load(xsd.toUtf8(), uri);

    return valid;
}

0 个答案:

没有答案