以下是我的函数的源代码:
bool FieldModel::updateNode(QDomNode &node,const QString &parent){
QDomElement rootOfTag;
rootOfTag=fieldState.firstChild().firstChildElement(parent);
qDebug()<<"Before"<<fieldState.toString();
QDomNodeList sameTags=rootOfTag.elementsByTagName(node.firstChild().toElement().tagName());
for(uint i=0;i<sameTags.length();i++){
QDomNode nodeToReplace=sameTags.item(i);
if(nodeToReplace.toElement().attribute("id")==node.firstChild().toElement().attribute("id")){
nodeToReplace.parentNode().replaceChild(node,nodeToReplace);//Cause Memory Leak
qDebug()<<"After"<<fieldState.toString();
return true;
}
}
insertNode(node,parent);
return true;
}
我的程序的内存使用量严格增加,但当我删除行nodeToReplace.parentNode().replaceChild(node,nodeToReplace);
时,程序使用稳定的内存量。
我监控fieldState(QDomDocument)
,并且在我使用replaceChild
时(我做了一些小改动)它没有增长。可能有什么问题?
感谢。
答案 0 :(得分:3)
对我来说看起来像是一个QDom错误(这不会让我感到惊讶,只是提交了一个补丁来使“&lt; a:&gt; foo&lt; / a:&gt;”不会崩溃QDom)。尝试一个最小的例子。如果仍然泄漏,如果在Linux或OS X上,您可以在valgrind中运行它。示例和valgrind输出都会生成一个很好的错误报告。
编辑:如果removeChild()也为你泄漏
会很有趣答案 1 :(得分:1)