我正在尝试使用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”行会引发分段错误,但我不知道问题出在哪里。
提前致谢。
答案 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。