Ошибка сегментации с использованием 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")))

Важным моментом является проверка на нулевое значение после получения указателя и перед разыменованием его.

Другие вопросы по тегам