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%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.
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.
Tags und Links c++ conways-game-of-life