TinyXML2 EXC_BAD_ACCESS我确定它是一个空的ptr,但不知道为什么

时间:2014-06-15 08:22:11

标签: c++ xcode pointers exc-bad-access tinyxml2

所以我已经在这几天了,我不知道为什么会抛出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 +&#34; laserRifle.xml&#34); 加载文件。我应该将其解析为字符串,还是有一些空的ptr我忽略了?我试图做一个“如果无效的”#39;条款,但它仍然是一个错误,而不是跳过它。

有关该怎么做的任何建议?我完全迷失了。

1 个答案:

答案 0 :(得分: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案例,则会发现您的错误