2013-11-08 2 views
0

Когда я запустил это, он загружает загруженный XML и загружает размеры, а затем печатает ошибку сегментации (сбрасывает ядра). Я скопировал пример, который я видел в руководстве для RapidXML, и аналогичный пример был приведен в StackOverflow. Что случилось с моей реализацией?Ошибка сегментации при использовании RapidXML

data.xml

<?xml version="1.0"?> 
<dimensions> 
    <x>400</x> 
    <y>400</y> 
    <z>1</z> 
</dimensions> 

Map.h

#ifndef MAP_H_ 
#define MAP_H_ 
class map{ 
    public: 
    std::vector<int> get_xml(); 
}; 
#endif 

map.cpp

#include <vector> 
#include <iostream> 
#include "../lib/rapidxml.hpp" 
#include "../lib/rapidxml_print.hpp" 
#include "../lib/rapidxml_utils.hpp" 

using std::vector; 
using std::cout; 
using std::endl; 
using namespace rapidxml; 

vector<int> map::get_xml(){ 
    file<> xmlFile("res/data.xml"); 
    cout<<"XML loaded"<<endl; 
    xml_document<> doc; 
    xml_node<> *dims=doc.first_node("dimensions"); 
    vector<int> values; 
    cout<<"Dimensions loaded"<<endl; 

    for(xml_node<> *dim=dims->first_node();dim;dim->next_sibling()){//breaks here 
     cout<<"Looping through attributes"<<endl; 
     values.push_back(atoi(dim->value())); 
    } 
    cout<<"All values loaded"<<endl; 
    return values; 
} 

main.cpp

#include <vector> 
#include "map.h" 
map Map; 
int main(int argc, char** argv){ 
    std::vector<int> dims=Map.get_xml(); 
    ... 
} 
+2

Вы уверены, что 'dims' не равно нулю? –

+0

Где именно происходит ошибка сегментации? Если вы используете отладчик, до какой строки вы можете шагнуть? – Constantin

+0

Я использую g ++ для компиляции. Но из моего cout это должно быть что-то с аргументами для цикла for –

ответ

0

.. По видиться, вам нужно позвонить doc.parse<>(); на ваш вход.

Попробуйте это:

vector<int> map::get_xml(){ 
    file<> xmlFile("res/data.xml"); 
    cout<<"XML loaded"<<endl; 
    xml_document<> doc; 
    doc.parse<0>(xmlFile.data()); 
    xml_node<> *dims=doc.first_node("dimensions"); 
    vector<int> values; 
    cout<<"Dimensions loaded"<<endl; 

    for(xml_node<> *dim=dims->first_node();dim;dim->next_sibling()){//breaks here 
     cout<<"Looping through attributes"<<endl; 
     values.push_back(atoi(dim->value())); 
    } 
    cout<<"All values loaded"<<endl; 
    return values; 
} 
Смежные вопросы