Zweidimensionales int array als Rückgabewert
-
Hallo
Ich habe ein kleines Problem.
Ich möchte in einer Funktion ein zweidimensionales int array von stdin einlesen und als rückgabewert ausgeben.
Hier mein Code:int ** getmatrix(){ int i=0; int j=0; int **mat; for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("Bitte %d. Zeile eingeben (1/0): ",i*j); scanf("%1d",mat[i][j]); } } return mat; }
Das array soll so aussehen:
int mat[3][3]
Bei der obigen Funktion erhalte ich allerdings nur
Segmentation fault
Bitte um Hilfe
-
Das erste, was du die überlegen solltest: "Wo kommt der Speicher für dein Array her?"
Ein
int mat[3][3];
ist etwas komplett anderes als einint **mat;
(auch wenn es bei 1D-Arrays funktioniert)Bei einem 2D-Array, z.B.
int mat[3][3];
wird ein zusammenhängender Speicherbereich belegt, der aus 3*3 Elementen besteht.
Für den Zugriff muss der Compiler aber die Grenzen des Arrays kennen.Dann gibt es noch
int *mat[3];
Da hast du ein 1D-Array aus 3 Zeigern auf int.
Jeder dieser Zeiger kann auch wieder auf ein oder mehrere int zeigen.
Diese int können aber ganz woanders liegen. Den Speicher dafür musst du aber noch besorgen und die Adresse in mat ablegen.
Auf ein einzelnes Element kannst du zwar auch über die Arrayschreibweise mat[i][j] zugreifen, aber es ist trotzdem kein 2D-Array.Nochmal zu deinem Problem:
Du hast keinen Speicher für deine Matrix angelegt.
-
Und wie löse ich das Problem??
-
Ich habe das Problem gelöst!!
Ich habs einfach direkt in main() geschrieben, da ich die Funktion nur 1x aufgerufen hätte.
Danke für die Hilfe