使用Tinyxml进行分段错误

时间:2010-08-14 00:02:48

标签: c++ tinyxml

我正在尝试使用Tinyxml递归读取Xml文件,但是当我尝试访问数据时,我得到了“分段错误”。这是代码:

int id=0, categoria=0;
const char* nombre;
do{  
    ingrediente = ingrediente->NextSiblingElement("Ingrediente");   
    contador++;  
    if(ingrediente->Attribute("id")!=NULL)
        id = atoi( ingrediente->Attribute("id") );  
    if(ingrediente->Attribute("categoria")!=NULL)
        categoria = atoi ( ingrediente->Attribute("categoria") );  
    if(ingrediente!=NULL)
        nombre = ( ( ingrediente->FirstChild() )->ToText() )->Value();  
}while(ingrediente);    

出于某种原因,三条“if”行会引发分段错误,但我不知道问题出在哪里。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您在每次迭代开始时更新ingrediente,然后在检查它不为空之前取消引用它。如果它为null,则会产生分段错误。循环应该按照

的方式构建
for (ingrediente = first_ingrediente; 
     ingrediente; 
     ingrediente = ingrediente->NextSiblingElement("Ingrediente"))
    contador++;  
    if(ingrediente->Attribute("id"))
        id = atoi( ingrediente->Attribute("id") );  
    if(ingrediente->Attribute("categoria"))
        categoria = atoi ( ingrediente->Attribute("categoria") );  
    nombre = ingrediente->FirstChild()->ToText()->Value();  
}

很抱歉将一些英文混合到变量名称中;我不会说西班牙语。

或者,如果NextSiblingElement在您开始迭代时为您提供第一个元素,则for可以替换为while

while ((ingrediente = ingrediente->NextSiblingElement("Ingrediente")))

重要的一点是在获取指针之后以及在解除引用之前检查null。