Если размер массива не известен во время компиляции, вы должны использовать цикл для выделения памяти для каждой строки.
Вот пример кода, который я нашел:
double** allocate2D(int nrows, int ncols) {
int i;
double **dat2;
/* allocate array of pointers */
dat2 = malloc( nrows*sizeof(double*));
if(dat2==NULL) {
printf("\nError allocating memory\n");
exit(1);
}
/* allocate each row */
for(i = 0; i < nrows; i++) {
dat2[i] = malloc( ncols*sizeof(double));
}
if(dat2[i-1]==NULL) {
printf("\nError allocating memory\n");
exit(1);
}
return dat2;
}
С здесь
Обязательно измените тип данных с двойного на все, что вам нужно.