

C++ - použití PugiXML a SIGSEGV error
Ahoj,
dělám na programu, kde potřebuji parsovat XML. Po dlouhé době jsem se tak zas dostal k C++ a mám problém s použitím knihovny pugixml. Kód se zkompiluje bez problémů, ale při pokusu o použití čehokoliv z této knihovny (včetně deklarace proměnné dat. typu, který je v knihovně) dojde k SIGSEGV. Vůbec nevím proč, u deklarace proměnné jsem se s takovou chybou nikdy nesetkal
Jestli si něčeho všimnete, prosím, poraďte
Moc děkuji, Katsu
EDIT: Abych doplnil info, vypadá to, že program padá už v metodě getMessage() třídy FileMsgReader.
Výpis s chybou
Tato metoda bude nacitat zpravy ze souboru file.txt
Neoprávněný přístup do paměti (SIGSEGV)
CPP kód
#include <iostream>
#include "./lib/pugixml.hpp"
#include "./lib/pugiconfig.hpp"
using namespace std;
using namespace pugi;
class Message {
private:
string messageBody;
Message( string messageBody ) {
this->messageBody = messageBody;
}
public:
bool isSpam() {
return true;
}
};
/**
* ABSTRAKTNI trida pro nacteni nove zpravy, ze ktere dedi konkretni Readery
*/
class Reader {
public:
virtual Message getMessage( string source ) = 0;
};
class FileMsgReader : public Reader {
public:
Message getMessage( string source ) {
cout << "Tato metoda bude nacitat zpravy ze souboru " << source << endl;
}
};
class WebMsgReader : public Reader {
public:
Message getMessage( string source ) {
cout << "Tato metoda bude nacitat zpravy z webu." << endl;
}
};
int main() {
FileMsgReader fmr;
WebMsgReader wmr;
fmr.getMessage("file.txt");
wmr.getMessage( "www.seznam.cz" );
cout << "ahoj" << endl;
xml_document doc; // TADY dojde k chybe
return 0;
}
Makefile
CC=mpic++
STD=-std=c++11
BINARIES=start
OBJECT_FILES=*.o
.PHONY: clean libraries
start: main.o libraries
${CC} main.o -o start ${STD} -L./lib -lpugixml
main.o: main.cpp
${CC} main.cpp -c -o main.o ${STD}
libraries:
$(MAKE) -C lib
clean:
rm -f ${BINARIES} ${OBJECT_FILES} nohup.out
A tady je struktura celého projektu:
spam_detector
├── lib
│ ├── libpugixml.a
│ ├── makefile
│ ├── pugiconfig.hpp
│ ├── pugixml.a
│ ├── pugixml.cpp
│ ├── pugixml.hpp
│ └── pugixml.o
├── main.cpp
├── main.o
├── makefile
├── pokus.cpp
├── start
└── test.xml
Keď to padá v getMessage, tak potrebujeme vedieť, ako vyzerá tá metóda. Súčasný kód sa nedá skompilovať (chýba tam return v getMessage a tiež chýba #include <string>, by si mohol používať operátor << na std::stringy).