2017-05-03 3 views
-1

UPDATE: Also das Problem war wirklich einfach und ich habe die Antwort markiert. Vielen Dank!C++ Array-Index ist nach dem Ende des Arrays

Also ich versuche, eine einfache Konsole-Anwendung, die ein 2D-Array mit Bäumen '^' und haben sie jedes Mal, wenn ENTER getroffen wird, eine Wahrscheinlichkeit der Einstellung in Brand, wenn das benachbarte Array in Brand ist.

Das Problem ist der Array-Index sagt mir, ich bin außerhalb der Grenzen und dies schlägt das Update meiner Simulation.

Dies ist das Fehlerbild:

Buildtime Warning messages. EDIT: Das mit der markierten Antwort festgelegt wurde, ist

Hier wird der aktualisierte Code das Problem enthält:

void updateForest(char grid[Max][Max], int probFactor) 
{ 
    char tempGrid[Max][Max]; 

    for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      tempGrid[Max][Max] = grid[Max][Max]; 
     } 
    } 

    for (int r = 1; r < Max - 1; r++) 
    { 
     for (int c = 1; c < Max - 1; c++) 
     { 
      if (checkNeighbour(grid, r, c)) 
      { 
       if ((rand()%100)+1 < probFactor && grid[r][c] == Tree) 
       { 
        tempGrid[r][c] = Burning; 
       } 
       if (grid[r][c] == Burning) 
       { 
        tempGrid[r][c] = Empty; 
       } 
      } 
     } 
    } 

    for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      grid[r][c] = tempGrid[r][c]; 
     } 
    } 

} 
+0

Das Array hat 21 Elemente zu schreiben. Gültige Indizes sind 0, 1, ..., 19 und 20. Sie haben versucht, den Index 21 zu verwenden, der nicht gültig ist. Machen Sie Ihr Array größer oder indexieren Sie nicht so weit. – nwp

+0

Sie sollten wirklich angeben, welche Zeile im Quellcode die Warnung auslöst. – Hurkyl

+0

Auch ist es unklar, ob Ihre Frage ist, warum Array-Index 21 ein Problem sein sollte, oder warum Array-Index 21 zugegriffen wird. (oder etwas anderes) – Hurkyl

Antwort

1

Below Schnipsel schafft Problem

for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      tempGrid[Max][Max] = grid[Max][Max]; 
     } 
    } 

Vielleicht möchten wir Sie

for (int r = 0; r < Max; r++) 
    { 
     for (int c = 0; c < Max; c++) 
     { 
      tempGrid[r][c] = grid[r][c]; 
     } 
    } 
2

C++ Arrays beginnen bei Index : 0 Die maximale Indexnummer für ein Array mit 21 Objekten ist "20"

1

In Ihre updateForest Methode haben Sie die folgende Zeile:

tempGrid[Max][Max] = grid[Max][Max]; 
Verwandte Themen