2016-04-25 9 views
-4

Ich bekomme immer einen segfault auf grid[x][y] = rand(); Irgendwelche Hilfe? Ich habe versucht, mit einer Reihe den Zufallsfunktionsaufruf ersetzt, um zu sehen, ob das ist, was das Problem verursacht wurde, aber es scheint nicht so .. Ich habeAbrufen eines Segmentfehlers. Warum?

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(){ 

int x; 
int y; 
int gridMult; 
int grid[gridMult][gridMult]; 

srand(time(NULL)); 

std::cout << "Enter grid size:: "; 
std::cin >> gridMult; 

while(x < gridMult){ 
    while(y < gridMult){ 
     grid[x][y] = rand(); 
     y++; 
    } 
x++; 
} 

for(int x = 0; x < gridMult; x++){ 
    for(int y = 0; y < gridMult; y++){ 
     std::cout << grid[x][y]; 
    } 
    std::cout << std::endl; 
} 
return 0; 
} 
+0

Was sind die Anfangswerte von x und y? – ZDF

+0

Move 'int grid [gridMult] [gridMult];' nach 'std :: cin >> gridMult;' –

+0

Sie initialisieren das Array 'grid' mit dem Wert' gridMult', der nicht definiert ist, Sie haben den Wert in 'gridMult' nachher geladen Array wurde erstellt, und das ist nicht, was Sie wollten – PcAF

Antwort

3

In diesen beiden Linien keine Ahnung,

int gridMult; 
int grid[gridMult][gridMult]; 

gridMult ist undefiniert, wie also erwarten Sie, dass der Compiler Ihr Array richtig dimensioniert?


Dann, wenn Sie an die Schleifen erhalten:

while(x < gridMult){ 
    while(y < gridMult){ 
     grid[x][y] = rand(); 

x und y sind auch nicht definiert.

Im Allgemeinen würde ich diese Schleifen in for (oder Bereich-for) ändern, um die Iterationsvariablen so eng wie möglich einzuschließen.


Wenn Sie es wollen, dynamisch basierend auf Benutzereingaben vergeben, std::vector und resize es auf die gewünschte Größe verwenden.

Ich würde auch hinzufügen, dass 2-dimensionale Arrays in der Regel auf einem 1-dimensionalen Speicher Vektor und 2-dimensionale Ansicht oben, anstatt verschachtelte Vektoren realisiert werden, so dass Sie vielleicht über diese Muster lesen möchten.

+0

selbst wenn 'gridMult' definiert ist,' int Gitter [gridMult] [GitterMult]; 'ist immer noch nicht erlaubt in C++ –

+0

@ LưuVĩnhPhúc True. Aber ich fühlte, dass die Konzentration auf * Lösungen *, nicht * Probleme * hier ein besserer Weg war. –

+0

Warum sollte das nicht erlaubt sein? Versuchen, über all diese lol zu lernen –

Verwandte Themen