PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++]SIGSEGV-Problem



Furantsu Kafuka
25-01-2013, 23:06
Hallo, ich verstehe nicht, was an meinem Code falsch ist.



#include <iostream>

#include <string>
#include <fstream>

typedef bool (*BoolFnct) (void);
BoolFnct NULLf_b=NULL;
/* Class to handle a game
*/
class cEngine
{
private:
BoolFnct loop_mod; //! function pointer to game content
void handleEvents(); //! handle input and eevents
void loop(); //! loop of the engine
std::ofstream *enginelog; //! log file
public:
cEngine(BoolFnct lp);
void addLogLine(const std::string txt="-1");
};


cEngine::cEngine(BoolFnct lp):
loop_mod(NULLf_b),
enginelog(NULL)
{
enginelog=new std::ofstream("log");
addLogLine("Init Window ...");
// ...
addLogLine("Load Textures ...");
// ...
loop_mod=lp;
loop();
}

void cEngine::handleEvents()
{
// if key ESC was pressed exiting the application
}

void cEngine::loop()
{
addLogLine("Starting loop!");
while (true)//(AppIsOpen())
{
addLogLine("looping ...");
handleEvents();
if(loop_mod==NULLf_b)
{
std::cout << "Game loop is not defined!" << std::endl;
return;
}

if(loop_mod()==false) // if it's in End-State leave loop
{
addLogLine("shuting down ...");
//App->close();
break;
}
}
addLogLine("Leaving loop ...");
}

void cEngine::addLogLine(const std::string txt="-1")
{
if(txt!="-1")
{
*enginelog << txt << std::endl;
std::cout << txt << std::endl;
}
else
{
*enginelog << std::endl;
std::cout << std::endl;
}
}

cEngine *Eng;

bool GameLoop();
int main()
{
Eng = new cEngine(GameLoop);
Eng->addLogLine("Sucessfull tested.");
return true;
}


bool GameLoop()
{
std::cout << "[I]It will follow an Error." << std::endl;
Eng->addLogLine("This is a test."); //! hier kommt der Fehler
std::cout << "[I]Ist the error still there?" << std::endl;
}

Was läuft hier mit dem Funktionszeiger falsch?

anda_skoa
26-01-2013, 11:49
Du rufst im Konstruktor von cEngine loop() auf, was wiederum zum Aufruf von GameLoop führt.

GameLoop ruft dann Eng->addLogLine auf, aber zu diesem Zeitpunkt ist Eng noch nicht initialisiert (das Programm exekutiert ja noch den Konstruktor von cEngine).

Ciao,
_