Fehler nach einfügen einer Variablendeklaration

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Fehler nach einfügen einer Variablendeklaration

Beitrag von jw202 »

Hallo,

ich habe ein primitives Schach programmiert (noch ohne Funktionen), welches sich sehr seltsam verhält.


Hier ist das Package: http://jowin.at/downloads/qtforum.zip


Folgendes Problem tritt auf: In der Datei mainwindow.h befindet sich unter anderem folgender Code

Code: Alles auswählen

private:
    Ui::MainWindow *ui;
    void redraw();
    int grauX;
    int grauY;
    bool cursor;
    int *a; //HIER IST DAS PROBLEM!!!!!
    chessPiece *field[8][8];
das Problem liegt an der Zeile int *a; (Zeile 37)

Sofern diese Zeile vorhanden ist, stürzt das Programm bei einem Klick auf das Schachfeld ab. Sofern ich diese Zeile auskommentiere, geht alles ohne Probleme. Über eine Erklärung wäre ich sehr dankbar. Dieser Fehler ist sehr unlogisch, da die besagte Variable int *a im Code garnicht verwendet wird.


LG und danke schon im Voraus.
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Re: Fehler nach einfügen einer Variablendeklaration

Beitrag von jw202 »

UPDATE: jetzt versteh ich die Welt absolut nicht mehr. Wenn ich die Zeile "bool cursor;" weglasse, dann funktioniert alles. WIESO? das ist eine harmlose bool Variable. Das ergibt keinen Sinn. Ich bitte um Aufklärung.

Code: Alles auswählen

private:
    Ui::MainWindow *ui;
    void redraw();
    int grauX;
    int grauY;
    chessPiece *field[8][8];
    int *a; //so funktionierts
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Fehler nach einfügen einer Variablendeklaration

Beitrag von Christian81 »

chessPiece ist ein Pointer und du greifst ohne diesen zu initialisieren darauf zu. Also den Pointer erst initialisieren, dann darauf zugreifen. Oder noch besser da wir hier C++ benutzen - nimm einen std-Container wie z.B. std::vector
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
jw202
Beiträge: 36
Registriert: 6. August 2012 22:25

Re: Fehler nach einfügen einer Variablendeklaration

Beitrag von jw202 »

danke für den hinweis. ich werd mir das mit der datenstruktur nochmal überdenken.


allerdings: warum tritt das Problem nur dann auf, wenn ich einen weiteren Pointer in der Header Datei aufnehme? Das Programm funktioniert fehlerfrei, wenn ich die Pointerdeklaration von int *a; herausstreiche.

außerdem habe ich sichergestellt, dass im Konstruktor von MainWindow die Funktion MainWindow::resetField() aufgerufen wird, wo alle 64 Felder von chessPiece *field[8][8]; definiert werden. Also dürfte es damit keine Probleme mehr geben.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Fehler nach einfügen einer Variablendeklaration

Beitrag von Christian81 »

Ignoriere meinen vorigen Post - geistige Umnachtung. Mein Kommentar mit C++ stimmt aber noch :)
Dein Fehler sind fehlende Initialisierungen von grauX und grauY. Dadurch stürzt das Programm beim Klick ab.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Fehler nach einfügen einer Variablendeklaration

Beitrag von franzf »

Das nennt sich "Default-Initialisierung", wenn es dich interessiert:
http://www.open-std.org/jtc1/sc22/wg21/ ... /n3242.pdf
8.5 Unterpunkt 6 dritter Strich.
(Eine Ausnahme gibts für Templates: da werden diese primitiven Typen automatisch null-initialisiert).

Und wg. dem Kommentar zu "C++":
* Zieh deine Schach-Logik aus MainWindow raus.
* Separier dein Schachbrett in eine einfache Speicherklasse
* Halte dort deine Schachbrettfelder in einem eindimensionalen vector
* Zugriff über (z.B.) fieldAt(int x, int y) { return _vec[y*8 + x]; }
Antworten