Verwirrender Fehler im Game Of Life Programm

8

Ich habe einen funktionierenden Game of Life Code. Es speichert jede Population als Bitmap. So sieht die Ausgabe aus (abgeschnitten):

Beim Säubern des Codes habe ich festgestellt, dass, wenn ich Zeile 60 auskommentiert oder auf andere Weise entfernt habe:

%Vor%

Es macht das Programm komplett durcheinander, und anstatt einen Gleitschirm wie er sollte produziert, produziert er folgendes:

Ich habe herumgestochert und versucht herauszufinden, was das verursachen könnte, aber ich war bisher erfolglos. Dies ist mein aktueller Code:

%Vor%     
Quicksilver 01.11.2014, 02:37
quelle

2 Antworten

6

Dinge wie diese:

%Vor%

muss neu geschrieben werden als:

%Vor%

Andernfalls befinden Sie sich direkt in undefiniertem Verhaltensgebiet, wenn entweder x oder y 0 sind (da sie beim Aufruf von check_neighbors() von check_survivors() mehrmals aufgerufen werden), und Sie können merkwürdig erwarten so unerklärliche Fehler. Sie müssen nach ungültigen Array-Indizes suchen , bevor Sie versuchen, auf diese Elemente zuzugreifen.

Auch hier:

%Vor%

Es sieht so aus, als ob survives mit einem unbestimmten Wert belassen werden könnte, wenn neighbors == 2 und population[x][y] == false , was auch zu undefiniertem Verhalten führen würde, wenn Sie auf diesen Wert zugreifen würden. Es ist nicht sofort klar aus Ihrem Code, ob diese Kombination von Umständen jemals wahr sein könnte, aber wenn Sie immer noch in der Debugging-Phase sind, dann lohnt es sich, eine Bedingungsprüfung hinzuzufügen, um zu überprüfen, ob sie jemals ist.

Wenn Ihr Programm ein undefiniertes Verhalten zeigt, wie es ist, dann ist es ziemlich unmöglich, darüber nachzudenken, bis diese Probleme behoben sind.

    
Paul Griffiths 01.11.2014, 02:46
quelle
3

Sie weisen der Variable survives z. Wenn population[x][y] ist false und neighbors ist 2. Dies belässt survives mit einem Wert von dem, was gerade im Speicher ist. Wenn Sie den cout -Aufruf hinzufügen, wird wahrscheinlich dieses Bit des Stack-Speichers auf 0 gesetzt, was den Programmfehler maskiert.

Fügen Sie survives einen Anfangswert hinzu, wenn Sie es deklarieren.

    
The Dark 01.11.2014 02:51
quelle

Tags und Links