牛人帮我看下这段简单代码,运行进SaveFile(FILEPathName)函数里出不来啊,好像死循环一样不断往文件写东西,什么情况啊?多谢
TiXmlDocument* pXmlDoc = new TiXmlDocument(FILEPathName);
TiXmlDeclaration xmlDeclaration("1.0","UTF-8","yes");
    pXmlDoc->InsertEndChild(xmlDeclaration);

TiXmlElement *pPlats = new TiXmlElement("Plats");
pXmlDoc->LinkEndChild(pPlats); TiXmlElement *pPlat = new TiXmlElement("Plat"); TiXmlText *pText = new TiXmlText(""); pText->SetValue(str);
pPlat->LinkEndChild(pText);
pPlats->LinkEndChild(pPlat);
pPlats->LinkEndChild(pPlat);
pXmlDoc->SaveFile(FILEPathName);

解决方案 »

  1.   

    没看出什么问题pPlats->LinkEndChild(pPlat);
    pPlats->LinkEndChild(pPlat);
    换成
    pPlats->LinkEndChild(pPlat);
    TiXmlElement *pPlat2= pPlat->clone();
    pPlats->LinkEndChild(pPlat2);
    试试
      

  2.   

    正确的写法是,TiXmlElement *pPlat2= (TiXmlElement *)pPlat->Clone();有两个节点指向的是同一个地址,造成savefile死循环void TiXmlDocument::Print( FILE* cfile, int depth ) const
    {
    assert( cfile );
    for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() )
    {
    node->Print( cfile, depth );
    fprintf( cfile, "\n" );
    }
    }
      

  3.   

    多谢楼上。要是在循环里插入元素,就在循环里new好了,不过每次再退出循环前delete好像出错,不delete貌似能行,有点迷茫啊
      

  4.   

    TiXmlElement::~TiXmlElement()
    {
    ClearThis();
    }
    void TiXmlElement::ClearThis()
    {
    Clear();
    while( attributeSet.First() )
    {
    TiXmlAttribute* node = attributeSet.First();
    attributeSet.Remove( node );
    delete node;
    }
    }
      

  5.   

    请注意:TiXmlElement析构函数中已经有了释放内存的操作