Problem d'appel de fonction
Bonjour, cette fois j'ai un problème que je trouve assez étrange
Pour commencer le code qui est concerné:
Thread.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#include <pthread.h>
class Thread
{
public:
void Start(void * arg);
pthread_t getThread() const {return m_Thread;}
protected:
Thread(void);
void Run();
static void * EntryPoint(void*);
virtual void Setup()=0;
virtual void Execute(void*)=0;
void * Arg() const {return m_Arg;}
void Arg(void* a){m_Arg = a;}
private:
pthread_t m_Thread;
void * m_Arg;
}; |
Thread.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include "Thread.h"
#include "..\..\..\Header.h"
Thread::Thread() : m_Thread(), m_Arg(NULL)
{
}
void Thread::Start(void * arg)
{
Arg(arg); // store user data
pthread_create(&m_Thread, NULL, Thread::EntryPoint, Arg());
}
void Thread::Run()
{
fprintf(stderr,"ici");
this->Setup();
this->Execute(m_Arg);
}
/*static */
void * Thread::EntryPoint(void * thread)
{
Thread * th = reinterpret_cast<Thread*>(thread);
th->Run();
return thread;
} |
MenuGame.h:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#pragma once
class ControlMenu;
class Observable;
#include "..\Base\Modules\Observer_Observable\Observer.h"
#include "Game.h"
#include "..\Base\Modules\Thread\Thread.h"
class MenuGame
: public View, public Observer, public Thread
{
private:
ControlMenu *m_control;
public:
MenuGame(ControlMenu *control);
void Setup();
void Execute(void*);
void update(Observable*);
}; |
MenuGame.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include "MenuGame.h"
#include "..\Model\MenuModel.h"
#include "..\Control\ControlMenu.h"
MenuGame::MenuGame(ControlMenu *control) : m_control(control)
{
}
void MenuGame::update(Observable *model){
MenuModel *menu = dynamic_cast<MenuModel*>(model);
SDL_BlitSurface(menu->getBackground(),NULL,View::m_screen,NULL);
SDL_BlitSurface(menu->getCursor(),NULL,View::m_screen,&menu->getPositionCursor());
}
void MenuGame::Setup(void){
fprintf(stderr,"coucou");
m_control->assitSetup();
}
void MenuGame::Execute(void*){
fprintf(stderr,"execute ");
bool continuer= true;
while(continuer){
this->eventUpdate();
if (m_key[SDL_QUIT]){
continuer=false;
}
if (m_key[SDLK_UP]){
this->m_control->updateCursor(UP);
}
if (m_key[SDLK_DOWN]){
this->m_control->updateCursor(DOWN);
}
if (m_key[SDLK_RETURN]){
this->m_control->selectMode();
}
}
} |
Main.c:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#pragma once
#include "Header.h"
#include "Control\ControlMenu.h"
#include "Model\MenuModel.h"
#include "View\MenuGame.h"
int main(int argc, char *argv[]){
MenuModel *model=new MenuModel();
ControlMenu *control=new ControlMenu(model);
MenuGame *view= new MenuGame(control);
view->Start(NULL);
fprintf(stderr,"%d ",view->getThread());
//pthread_join(view->getThread(), NULL);
return 0;
} |
Voilà, le problème est que mon programme plante simplement quand j'appel la fonction Setup ou Execute dans la fonction Run, même si je met tout le contenu de la fonction en commentaire:
First-chance exception at 0x01245ba0 in Bomberman.exe: 0xC0000005: Access violation reading location 0x00000000.
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
The thread 'Win32 Thread' (0x117c) has exited with code 3 (0x3).
The program '[4780] Bomberman.exe: Native' has exited with code 3 (0x3).
quelqu'un peut m'expliquer pourquoi?
Merci d'avance