Zweidimmensionales Array?
-
#include <stdio.h> int main(void) { // Doppelter Zeiger int **Matrix = NULL; int i, a, b; // Erste Dimension reservieren (Zeilen): Matrix = malloc(sizeof(int*) * 5); // Zweite Diemension reserveiren (Spalten): for(i = 0; i < 9; i++) { Matrix[i] = malloc(sizeof(int) * 9); } // Matrix initialisierien mit Zeilennummer gefolgt von Spaltennummer i = 0; for(a = 0; a < 5; a++) for(b = 0; b < 9; b++) { Matrix[a][b] = i; i++; } // Matrix ausgeben for(a = 0; a < 5; a++) { for(b = 0; b < 9; b++) { printf("%d ", Matrix[a][b]); } printf("\n"); } // Speicherplatz freigeben for(i = 0; i < 9; i++) { free(Matrix[i]); } free(Matrix); }
Finde meinen Fehler nicht - mein Debugger sagt mir auch nur das der Fehler unterhalb des Kommentars Speicherplatz freigeben zu finden ist - ich kann jedoch hier keinen Fehler entdecken... mmh?
PS: Ich weiß, dass es schlampig programmiert ist
-
// Erste Dimension reservieren (Zeilen): Matrix = malloc(sizeof(int*) * 5); // Zweite Diemension reserveiren (Spalten): for(i = 0; i < 9; i++) { Matrix[i] = malloc(sizeof(int) * 9); } [...]
Das fängt schon hier an, die Anzahl der Zeilen ist 5, die for Schleife läuft aber 10 mal durch.
Edit: kleine Korrektur
-
Matrix = malloc(sizeof(int*) * 5); // Zweite Diemension reserveiren (Spalten): for(i = 0; i < 9; i++)
da ist ein Fehler, denn einerseits reservierst du nur 5 Stellen aber deine for Schleife läuft 10 Mal. Schon bei Matrix[5] sollte es nicht mehr gehen.
Überprüfe immer (nach malloc), dass kein NULL zurückgegeben wird.
-
ups... so müsste es jetzt passen - jedenfalls stürtzt das Programm nicht mehr ab und tut was es soll (dachte ich hätte irgendwo mit den Zeigern geschludert):
#include <stdio.h> int main(void) { // Doppelter Zeiger int **Matrix = NULL; int i, a, b; // Erste Dimension reservieren (Zeilen): Matrix = malloc(sizeof(int*) * 5); // Zweite Diemension reserveiren (Spalten): for(i = 0; i < 5; i++) { Matrix[i] = malloc(sizeof(int) * 9); } // Matrix initialisierien mit Zeilennummer gefolgt von Spaltennummer i = 0; for(a = 0; a < 5; a++) for(b = 0; b < 9; b++) { Matrix[a][b] = i; i++; } // Matrix ausgeben for(a = 0; a < 5; a++) { for(b = 0; b < 9; b++) { printf("%d ", Matrix[a][b]); } printf("\n"); } // Speicherplatz freigeben for(i = 0; i < 5; i++) { free(Matrix[i]); } free(Matrix); }
supertux schrieb:
Überprüfe immer (nach malloc), dass kein NULL zurückgegeben wird.
werd ich in zukunft machen
-
Warum machst du es dann nich?