#include <stdio.h>
#include <malloc.h>
#define NUM_ROWS 5
#define NUM_COLS 10
void dynamic_allocation_malloc3();
int main() {
dynamic_allocation_malloc3();
}
void dynamic_allocation_malloc3() {
int (**ptr)[]; //ptr is a pointer to a pointer to a 1-d integer array
ptr = malloc(NUM_ROWS * sizeof(int(*)[])); // allocate as many as NUM_ROWS pointers to 1-d int arrays. The memory holds pointers to rows
for(int row=0; row < NUM_ROWS; row++) {
ptr[row] = malloc(NUM_COLS * sizeof(int));
for(int col=0; col < NUM_COLS; col++) {
ptr[row][col] = 17;
}
}
}
Этот код выдает следующую ошибку при компиляции:
$ gcc -std=c99 dynamic_allocation_scratch.c
dynamic_allocation_scratch.c: In function ‘dynamic_allocation_malloc3’:
dynamic_allocation_scratch.c:23:13: error: invalid use of array with unspecified bounds
ptr[row][col] = 17;
^
dynamic_allocation_scratch.c:23:13: error: invalid use of array with unspecified bounds
Исправление должно заменить
ptr[row][col] = 17;
на
(*ptr[row])[col] = 17; //de-reference the pointer to 1-d array to get the array and then use col index
Вопрос:
Я хочу уточнить мое понимание здесь. Правильно ли я объяснил, почему исправление работает? Любые дальнейшие разъяснения, почему оригинальный код не работал, также будут оценены.