Sie haben einen "Zeiger auf den Zeiger". Das kann kein 2D-Array darstellen.
Die richtige Erklärung eines Zeigers auf einem 2D-Array ist
// number of elements in one row
#define COLS 10
// number of rows
#define ROWS 20
int (*array)[COLS]; // mind the parenthesis!
Das array
einen Zeiger auf Array von COLS
int
s macht. Der Typ ist `int (*) [COLS], btw. aber Sie brauchen den Typ nicht, siehe unten.
Um die Array zuweisen sollten Sie dann die Standardbelegung für eine 1D-Array nutzen:
array = malloc(sizeof(*array) * ROWS); // COLS is in the `sizeof`
array = malloc(sizeof(int[ROWS][COLS])); // explicit 2D array notation
Welcher Variante ist persönlicher Stil zu verwenden. Während die erste keine Redundanz enthält (beachten Sie, dass Sie die Deklaration von array
ändern, um INNER
anstelle von COLS
oder den Elementtyp zu float
zu verwenden). Die zweite ist auf den ersten Blick klarer, aber fehleranfälliger beim Ändern der Deklaration von array
.
Um free
:
free(array);
Sind Sie mit C oder C++? – NathanOliver
@NathanOliver C – ninazzo
Sie könnten Ihre eigene Funktion schreiben, die alles enthält, was dazu nötig ist. Ansonsten gibt es keine Syntax-Tricks, die dies ermöglichen würden. –