Problem mit Zeigern
-
Hallo Leute,
Sorry, dass Ich schon wieder etwas bei euch poste, doch seit Tagen sitze Ich vor der gleichen Fehlermeldung. Das ist der Code:class CSki { friend class CTree; private: SDL_Rect m_rect; SDL_Rect m_clip[5]; SDL_Surface *m_image; int m_angle; int m_xSpeed; int m_ySpeed; bool m_collided; void set_clips(); public: CSki(); void show(); void move(); void handle_events(); void reversal(int direction); ~CSki(); }; void CSki::set_clips() { m_clip[0].x = 0; m_clip[0].y = 0; m_clip[0].w = 45; m_clip[0].h = 65; m_clip[1].x = 45; m_clip[1].y = 0; m_clip[1].w = 45; m_clip[1].h = 65; m_clip[2].x = 90; m_clip[2].y = 0; m_clip[2].w = 45; m_clip[2].h = 65; m_clip[3].x = 135; m_clip[3].y = 0; m_clip[3].w = 45; m_clip[3].h = 65; m_clip[4].x = 180; m_clip[4].y = 0; m_clip[4].w = 45; m_clip[4].h = 65; m_clip[5].x = 225; m_clip[5].y = 0; m_clip[5].w = 66; m_clip[5].h = 50; } CSki::CSki() { m_image = load_image("Skier.png"); m_rect.x = 298; m_rect.y = 100; m_angle = 2; m_xSpeed = 2; m_ySpeed = 0; m_collided = false; set_clips(); } void CSki::show() { apply_surface(m_rect.x,m_rect.y,m_image,screen); //Diese Zeileverursacht das Problem } void CSki::move() { if (!m_collided) { switch (m_angle) { case 0: m_xSpeed = -2; m_ySpeed = 1; break; case 1: m_xSpeed = -1; m_ySpeed = 2; break; case 2: m_xSpeed = 0; m_ySpeed = 3; break; case 3: m_xSpeed = 1; m_ySpeed = 2; break; case 4: m_xSpeed = 2; m_ySpeed = 1; break; } m_rect.x += m_xSpeed; SCROLLING_SPEED = m_ySpeed; if (m_rect.x < 0) {m_rect.x = 0;} if (m_rect.x > SCREEN_WIDTH - m_rect.w) {m_rect.x = SCREEN_WIDTH - m_rect.w;} } } void CSki::reversal(int direction) { m_angle += direction; if (m_angle > 4) {m_angle=4;} if (m_angle <0) {m_angle=0;} } void CSki::handle_events() { if (event.type == SDL_KEYDOWN) { if (event.key.keysym.sym == SDLK_LEFT) { reversal(-1); } if (event.key.keysym.sym == SDLK_RIGHT) { reversal(1); } } } CSki::~CSki() { SDL_FreeSurface(m_image); }Die markierte Zeile verursacht das Problem. Es liegt daran, dass m_image nicht korrekt geladen wurde. Habt ihr Ideen, wie man das Problem lösen kann?
Vielen Dank
/edit pumuckl: BB-Codes aktiviert (sonst bringen die cpp-Tags nichts)
-
Fr0d0 schrieb:
seit Tagen sitze Ich vor der gleichen Fehlermeldung.
Die da wäre?
Aktiviere BBCode in deinem Beitrag.
-
Unbehandelte Ausnahme bei 0x68128c2c in NextTry.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x0000010d.
Das ist die Fehlermeldung. Habt ihr eine Idee, woran das liegen könnte?
-
SDL_Rect m_clip[5]; m_clip[5].x = 225; m_clip[5].y = 0; m_clip[5].w = 66; m_clip[5].h = 50;Ist nicht vereinbar, da m_clip mit 5 Elementen nur einen index von 0 bis 4 hat.
-
Ich lerne auch seit ein 4 Monaten C++ aber ist bei dir am Anfang keinen Fehler?
Bei der Vererbung geht doch anders:
class CSki : public CTree
{
....
-
Nein Ich leite die Klasse einfack von einer anderen ab. Willkommen im Club- wegen der bisherigen Dauere des C++ lernens.
Noch einmal eine Frage zu verketten Listen. Bei mir erscheint die Meldung:
"Unbehandelte Ausnahme bei 0x681109b1 in NextTry.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xfeeefeee."Hier der code
void CGame::move_trees() { std::list<CTree>::iterator iter = m_lTreeList.begin(); for (iter;iter!=m_lTreeList.end();++iter) { if (iter->IsAlive() ) { iter->move(); } else { :arrow_right: m_lTreeList.pop_front(); } } } void CGame::show_trees() { for (std::list<CTree>::iterator iter = m_lTreeList.begin();iter!=m_lTreeList.end();++iter) { :arrow_right: iter->show(); } }Was mache ich falsch? Ideen? Die Zeilen, die ich auskommentieren muss, damits funzt sind masrkiert.