TinyXML2 EXC_BAD_ACCESS Я уверен, что это нулевой ptr, но не знаю почему

0

Таким образом, я был в этом несколько дней, и я понятия не имею, почему возникает ошибка BAD_ACCESS. Иногда это работает, иногда это не так.

void xmlParser::parseXML(string file){

tinyxml2::XMLDocument doc;
if(!doc.LoadFile(file.c_str()))
{
    cout << "ERROR: TINYXML2 FAILED TO LOAD" << endl;
}
//XML FILE LAYOUT:
//<item>
//    <type id="laserWeapon" name="Laser Rifle">
//    <tooltip>
//    <stats>
//</item>

//error seems to occur on this line
tinyxml2::XMLElement* elementType = doc.FirstChildElement("item")->FirstChildElement("type");

string id = elementType->Attribute("id");
string name = elementType->Attribute("name");
cout << "id: " << id << endl;
cout << "name: " << name << endl;
}   

Я использую xmlparser.parseXML(xmlparser. path+ "laserRifle.xml"); для загрузки файла. Должен ли я разбирать это как строку, или есть какой-то нулевой птр, я пренебрегаю? Я попытался сделать предложение "if nullptr", но все равно получается ошибка, а не пропуск.

Любые советы о том, что делать? Я полностью потерял это.

Теги:
xcode
pointers
exc-bad-access
tinyxml2

1 ответ

0
Лучший ответ
// item element can be missed and you'll get bad access. Do not chain your calls that way

tinyxml2::XMLElement* elementType = doc.FirstChildElement("item")->FirstChildElement("type");

// element type can be missed, as well as attributes id and name
string id = elementType->Attribute("id");
string name = elementType->Attribute("name");
cout << "id: " << id << endl;
cout << "name: " << name << endl;
}   

Тщательно проверьте каждый элемент и атрибут. Не связывайте вызовы, потому что каждый вызов может вернуть значение null. Если вы проверите все случаи nullptr, вы найдете свою ошибку

  • 0
    Благодарю. Кажется, получить nullptr на FirstChildElement ("элемент");
  • 0
    Пожалуйста, примите мой ответ, если вы не возражаете

Ещё вопросы

Сообщество Overcoder
Наверх
Меню