Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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

Předmět Autor Datum
Keď to padá v getMessage, tak potrebujeme vedieť, ako vyzerá tá metóda. Súčasný kód sa nedá skompilo… poslední
los 14.02.2015 10:34
los

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).

Zpět do poradny Odpovědět na původní otázku Nahoru