Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.05.2010, 14:30

Kapitel 12 Debug Problem

Hallo,
ich hab das Beispielprogramm etwas gekürzt, jedoch bekomm ich beim Debugging immer Probleme und weiß keine Lösung dafür.
Ich hab ein Bild der Fehlermeldung gemacht.
Angeblich wird das Bild nicht gefunden und es soll Speicherprobleme geben




(Link)

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

14.05.2010, 14:54

Du dereferenzierst einen Nullzeiger!

Im Konstruktor wird m_pSpritePlayer auf null gesetzt und dann in CPlayer::init() mit -> dereferenziert. Du musst am Anfang von CPlayer::init() zumindest mal ein

C-/C++-Quelltext

1
m_pSpritePlayer = new CSprite()
einfügen, oder keine dynamischen Objekte verwenden.

Außerdem: einfach mal ein paar zeilen Code rausnehmen klappt meistens nicht...

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

3

14.05.2010, 15:11

Du dereferenzierst einen Nullzeiger!

Im Konstruktor wird m_pSpritePlayer auf null gesetzt und dann in CPlayer::init() mit -> dereferenziert. Du musst am Anfang von CPlayer::init() zumindest mal ein

C-/C++-Quelltext

1
m_pSpritePlayer = new CSprite()
einfügen, oder keine dynamischen Objekte verwenden.

Außerdem: einfach mal ein paar zeilen Code rausnehmen klappt meistens nicht...

mfg CBenni::O
Oh hab ich wohl vergessen aber immer noch der selbe Fehler.
Und ich hab nicht nur ein paar Teile entfernt, ich hab das Programm neu geschrieben damit ich mit dem Raumschiff auch vor und zurück fliegen kann.

€: Kompilieren funktioniert alles bestens nur beim Debugging

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

4

14.05.2010, 15:23

Bist du dir sicher, dass du auch eine Instanz von CPlayer erstellst?

Wenn du praktisch so etwas machst:

C-/C++-Quelltext

1
2
CPlayer* pPlayer = NULL;
pPlayer->init();
Tritt der selbe Fehler auf...

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

5

14.05.2010, 15:40

Bist du dir sicher, dass du auch eine Instanz von CPlayer erstellst?

Wenn du praktisch so etwas machst:

C-/C++-Quelltext

1
2
CPlayer* pPlayer = NULL;
pPlayer->init();
Tritt der selbe Fehler auf...

mfg CBenni::O
also wenn ich so etwas mache tritt beim Kompilieren ein Fehler auf

bei mir Erscheint beim Debugging immer diese Meldung:


(Link)

little_Progger

Treue Seele

Beiträge: 188

Wohnort: Nähe Bielefeld

Beruf: Azubi

  • Private Nachricht senden

6

14.05.2010, 15:42

Es könnte gut sein das du einen Zeiger nicht initialisiert hast da du wahrscheinlich versuchst mit einer Variable mit der adresse
0x00000000 zu arbeiten.
Da du Zeiger nullterminierst liegt dies sehr nahe.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

7

14.05.2010, 15:59

Ein Zeiger auf die Klasse repräsentiert erst ein Objekt, wenn du den Zeiger auf dieses Objekt setzt. Vorher verweist er auf gar nichts und kann somit auch nicht verwendet werden.

Du kannst entweder ein Objekt auf dem Stack erzeugen und dann den Zeiger darauf zeigen lassen(ich rate aber davon ab), oder du erzeugst ein Objekt dynamisch auf dem Heap. Stichwort

C-/C++-Quelltext

1
new
.

Erst wenn der Zeiger "gültig" ist, also auf ein gültiges Objekt verweist, kannst du ihn mit den entsprechenden Methoden verwenden. Wenn du den Zeiger "ungültig" verwendest, dann erhältst du solch eine Fehlermeldung ;).
WIP Website: kevinheese.de

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

8

14.05.2010, 16:33

Oder man verwendet erst gar keine Zeiger und nutzt nur Stack-Objekte (sofern diese nicht zu groß sind)...

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

9

14.05.2010, 16:40

Oder man verwendet erst gar keine Zeiger und nutzt nur Stack-Objekte (sofern diese nicht zu groß sind)...

mfg CBenni::O


Das ergibt aber auch keinen Sinn, wenn du das Objekt über verschiedene Scopes hinweg verwenden musst, bspw. wenn du es einer Funktion übergeben musst. Da ist ein Zeiger bei Weitem günstiger, als das Objekt "in die Funktion zu kopieren".
WIP Website: kevinheese.de

10

14.05.2010, 17:05

ich find mein Fehler nicht ;(

Quellcode

1
CSprite {m_pScreen=??? m_pImage=??? m_Rect={...} ...}

das wird angezeigt wenn ich mit der Maus über die Klasse fahre

Werbeanzeige