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

02.05.2012, 19:20

[C++] Programm stürzt ab (Liste /Zeiger/Klassen)

Hey.
Ich hab angefangen mir ein kleinees Spiel zu programmieren und wollte die Funktion schreiben,die das Labyrinth erzeugt.
Um zu testen ob die Funktion auch wirklich funst hab ich die"halbfertige" Funktion einfach mal getestet.
(

C-/C++-Quelltext

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
void CGame::GenerateLab()
          {for(int i = 0;i<17;i++)
    {
        m_iCellValues[i][0] = -1;
    }
    for(int i = 0;i<19;i++)
    {
        m_iCellValues[0][i] = -1;
        m_iCellValues[16][i]= -1;
    }
    cout<<"Setting walls..."<<endl;
    for(int i = 0;i<17;i++)
    {   for(int j = 0;i<19;j++)
            {
             if(m_iCellValues[i][j] == -1)
                {
                 
                 m_pCell = new CCell();
                 m_pCell->SetWall((i*50),(j*50));
                 cout<<"Setting wall done..."<<endl;
                 m_lCells.push_back(m_pCell);
                 cout<<"pushed wall to list..."<<endl;
                }
            }
    }
    cout<<"Setting walls Done..."<<endl;



}

//Die nötigen Variablen & andere Funktionen...
  //aus der CGame Klasse:
                            int m_iCellValues[17][19];
                            list<CCell*> m_lCells;
        list<CCell*>::iterator i;
   //Aus der Klasse CCell(soll die Informationen einer Zelle speichern)
                             void CCell::SetWall(int xCor,int yCor)
                             {
                     m_fXPos = static_cast<float> (xCor);
                     m_fYPos = static_cast<float> (yCor);
                     m_pWallSprite = new CSprite;
                     m_pWallSprite->Load("Img/wall.bmp");
                     m_pWallSprite->SetPos(m_fXPos,m_fYPos);
                     m_iCellValue = -1;

                              }

So...Wenn ich dann das Programm starte hängt es sich irgendwann in der for-schleife(z.12 denke ich mal...)auf und stürzt ab...
1)Warum kann das sein?Irgendwas mit zuviel Speicher verbraucht oder...?Ich komm da einfach nicht drauf.Das Buch liefert auch keine näheren Informationen ...:(
Wenns ein eher simpler Fehler ist würde mir auch ein Tipp in die richtige Richtung reichen :D
2)Wenn das einfacher gehen würde,wäre ich dankbar,wenn das jemand sagen könnte (:

lg
*grins*
*grins*

Crazy007

Treue Seele

Beiträge: 186

Wohnort: Tirol

  • Private Nachricht senden

2

02.05.2012, 19:31

Probiere (falls du Visual Studio benützt) F10 und schaue Schritt für Schritt wo das Programm abstürtzt.
Der Error sitzt meistens vor dem Bildschirm! :D

3

02.05.2012, 19:44

okay hab ich gemacht jetz kommt als fehler :
"Unbehandelte Ausnahme bei 0x776b15de in pacman.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00287000."
Wenn ich dann auf "Weiter "klicken kommt:
"Unbehandelte Ausnahme bei 0x776b15de in pacman.exe: 0x00000000: Der Vorgang wurde erfolgreich beendet."
...
Das Programm wird nach

C-/C++-Quelltext

1
 m_lCells.push_back(m_pCell); 
unterbrochen...
Im Disassembly bleibt der Pfeil bei "010EB51C cmp esi,esp" stehen.Falls das wichtig sein sollte...
*grins*
*grins*

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »51deK1ck« (02.05.2012, 19:50)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

4

02.05.2012, 20:10

Das hilft doch schon viel. Das heißt, dass sich in m_lCells oder in m_pCell irgendwo ein Nullzeiger versteckt. Das kannst du debuggen, indem du das Programm per Haltepunkt bei der von dir genannten Zeile anhälst und mit der Maus kurz über den Variablennamen verweilst. Deren Inhalt wird auf diese Weise eingeblendet.

5

02.05.2012, 20:19

Ich weiss nicht, ob das beabsichtigt ist, aber in Z. 13 steht :

C-/C++-Quelltext

1
for(int j = 0;i<19;j++)

sollte dass nicht :

C-/C++-Quelltext

1
for(int j = 0;j<19;j++)

heissen??

6

03.05.2012, 18:56

Nein das war nicht beabsichtigt.
Jetz kann ich zwar das Programm starten und meine Figur aufm Bildschrim bewegen,dafür
kam beim ersten Debuggen beim Beenden des Programms ein Fehler(Anhang."error.png") & ich bin anscheinden zu blöd die Documentation zu finden ? :o
Dann hab ichs einfach nochmal debuggt (in Einzelschritten) und dann kam ein anderer Fehler.("error2.png").
Ich hab absolut keinen Plan was da nicht funst?-.-
»51deK1ck« hat folgende Bilder angehängt:
  • error.png
  • error2.png
*grins*
*grins*

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

03.05.2012, 23:42

Bei Einzelschritten weißt du doch in welcher Zeile das Problem auftritt. Guck da doch noch mal genauer. Guck mal welche Werte die Variablen in dieser Zeile haben und woher der Fehler kommen könnte. Zusätzlich kannst du mal hier den Code dazu posten mit genauer Zeilenangabe des Fehlers. Aber versuch erst mal selbst zu gucken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

04.05.2012, 01:33

Ich würde mal sagen du greifst irgendwo auf Speicher zu, den du schon deleted hast...

9

23.05.2012, 18:07

ja der fehler lag beim löschen der zeiger :o
Jetz gehts endlich (:
Danke an alle!
*grins*
*grins*

Werbeanzeige