2016-03-21 1 views
-1

Ich versuche, eine Funktion in C++, die eine 2D-Anordnung von bestimmten, zufälligen Buchstaben zurückgibt. Eine andere Funktion wird verwendet, um Benutzereingaben zu erhalten, wie die Länge des Arrays. Der folgende Code kompiliert, führt jedoch zu einem Segmentierungsfehler (core dumped).Erstellen Sie zufällige 2d Array von char in C++ Segmentierung Fehler Fehler

char** createGrid() { 
    srand(time(NULL)); //INIT RANDOM SEED 
    int rd; 
    char** grid[widthHeight]; 
    rd = rand() % 4; 
    char letters[5] = { 'E', 'G', 'R', 'F', 'B' } ; 
    for(int i = 0; i < widthHeight-1; i++) { 
     for(int j = 0; j < widthHeight-1; j++) { 
      **grid[i] = letters[rd]; 
      cout << grid[i] << endl; 
      **grid[j] = letters[rd]; 
      cout << grid[j] << endl; 

     } //for 

    } //for 
    return *grid; //idk why need * 
} 

int main(int argc, char* argv[]) { 
    getInput(); 
    createGrid(); 
    return 0; 
} 
+0

Wie kann ich das beheben? – Lizzie

Antwort

0

char** grid[widthHeight]; - Array von Zeigern, kein Speicher für aktuelle Daten zugeordnet.

**grid[i] = letters[rd]; - versuchen, nicht vorhandene Speicher

Try Speicher zuweisen zu schreiben.

Nicht klar, warum Sie char ** brauchen? Warum nicht einfach

char grid[widthHeight]; //memory allocated 

und return char *, das ist nur "Grid".

-1

Sie müssen Speicher reservieren.

Sie verwendet 2d Zeiger und ein Array, das ziemlich verwirrend macht, aber bitte versuchen Sie es mit Einsetzen folgenden Code:

...... 
rd = rand() % 4; 

for(i=0; i<widthHeight; i++) { 
    grid[i] = (char **) malloc(widthHeight*sizeof (char *)); 
} 

for(j=0; j<widthHeight; j++) { 
    for(k=0; k<widthHeight; k++) { 
     grid[j][k] = (char *)malloc(widthHeight*sizeof (char)); 
    } 
} 

char letters[5] = { 'E', 'G', 'R', 'F', 'B' } ; 
...... 
+0

Dies erstellt kein zufälliges Gitter, das die Buchstaben enthält, und obwohl es kompiliert wird, gibt es immer noch einen Segmentierungsfehlerfehler zurück – Lizzie

-1

char ** grid [widthHeight]; ist eine lokale Variable und wird nach dem Verlassen der Funktion zerstört. Versuchen Sie es zumindest statisch zu machen.