Bonjour, cette fois j'ai un problème que je trouve assez étrange
Pour commencer le code qui est concerné:
Thread.h:
Thread.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; };
MenuGame.h:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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*); };
Main.c:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } } }
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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
Partager