Вы обновляете ingrediente
в начале каждой итерации, а затем разыменовываете его перед проверкой, что оно не равно нулю. Это даст ошибку сегментации, если она равна нулю. Цикл, вероятно, должен быть структурирован по линии
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")))
Важным моментом является проверка на нулевое значение после получения указателя и перед разыменованием его.