Ошибка сегментации с использованием Tinyxml
Я пытаюсь рекурсивно прочитать файл XML с помощью Tinyxml, но когда я пытаюсь получить доступ к данным, я получаю "Ошибка сегментации". вот код:
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);
По какой-то причине три строки "если" дают мне ошибку сегментации, но я не знаю, в чем проблема.
Заранее спасибо.
1 ответ
Вы обновляете 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")))
Важным моментом является проверка на нулевое значение после получения указателя и перед разыменованием его.