2014-09-17 2 views
2

Действительно ли он в C динамически выделяет 2d массивы таким образом?Выделение 2D-массива с указателем на массив фиксированного размера

//fixed size 
int (*arr2d)[9][9]=malloc(sizeof(int[9][9])); 

//variable size 
int x=5,y=3; 
int (*arr2d)[x][y]=malloc(sizeof(int[x][y])); 

//assignment 
(*arr2d)[0][1]=2; 

EDIT: Под «действительный» Я имею в виду, есть ли подводные камни в противоположности:

int i,x=5,y=10; 
int **arr2d=malloc(sizeof(int*[x])); 
for(i=0;i < x;i++) 
    arr2d[i]=malloc(sizeof(int[y])); 

arr2d[0][0]=5; 

ответ

2

Единственная реальная проблема, если вы запрашиваете больше памяти, чем malloc вызова может удовлетворить (вас может иметь достаточно памяти, но не в одном непрерывном блоке).

Чтобы сохранить здравомыслие, сделать что-то вроде этого, вместо:

T (*arr)[cols] = malloc(sizeof *arr * rows); 

Это позволит индексировать его в качестве arr[i][j] вместо (*arr)[i][j].

Смежные вопросы