Code funktioniert nur während des Debuggens



  • Hallo C-plusplus-Forum 🙂

    Es handelt sich um folgenden Code:

    typedef int color; 
       color **triangle = 0;
    
       triangle = new color*[length];
       //int col = 1; // Currently used color
       for (int i = 0; i <= length; i++) {
           triangle[i] = new color[i];
           for (int j = 0; j <= i; j++) {
               triangle[i][j] = 1;
               //col = (col == 1) ? 2 : 1;
           }
       }
    

    Den Code zum Ändern der Farbe habe ich auskommentiert, also sollte überall 1 drinstehen. Um das zu Überprüfen, habe ich folgende Funktion zur Ausgabe:

    void display(color **c) {
        for (int i = 0; i <= length; i++) {
            for (int j = 0; j <= i; j++) {
                cout << c[i][j] << " ";
            }
            cout << endl;
        }
    }
    

    Beide Funktionen funktionieren einwandfrei, solange er gedebuggt wird. Sobald ich das Programm nicht debugge, sondern gan normal starte ist dieser Eintrag:

    1
    1 1
    1 1 x
    1 1 1 1
    1 1 1 1 1
    

    zufällig. Außerdem funktioniert das Programm nicht für eine Arraygröße > 9, obwohl der Speicherbedarf mit 228 Bytes doch überhaupt kein Problem sein sollte!!!! Auch hier ist das Phänomen zu sehen: Wenn ich das Programm debugge, hält es sogar einer Arraygröße von 1000 Einträgen stand!

    Was kann ich tun, damit das Programm auch ohne gedebuggt zu werden funktioniert?



  • Deine Schleifen laufen jeweils um 1 zu weit. Wenn du ein Array der Länge length anlegst, ist der höchste erlaubte Index length-1.



  • Hallo,

    danke für deine Antwort!

    Ich habe jedoch noch einige Fragen:

    Wieso läuft die zweite Schleife zu weit?
    Und warum funktioniert das Programm denn jetzt während des Debuggens?



  • Mitmischer 1703 schrieb:

    Wieso läuft die zweite Schleife zu weit?

    j läuft von 0 bis (einschließlich) i.
    triangle[i] ist aber ein Array der Länge i, der höchste erlaubte Index ist also i-1.

    Mitmischer 1703 schrieb:

    Und warum funktioniert das Programm denn jetzt während des Debuggens?

    Dein Programm erzeugt undefiniertes Verhalten. Es kann also alles mögliche passieren, auch dass es so aussieht, als ob das Programm fehlerfrei läuft.



  • ein klassischer Heisenbug



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C++ (auch C++0x) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten