У меня вопрос, как распределяется память, когда я calloc
. Я просмотрел этот вопрос, но это не так. t адрес, как распределяется память в случае динамически распределяемого двумерного массива.
Мне было интересно, есть ли разница в представлении памяти между следующими тремя способами динамического выделения 2D-массива.
Тип 1:
double **array1;
int ii;
array1 = calloc(10, sizeof(double *));
for(ii = 0; ii < 10; ii++) {
array1[ii] = calloc(10, sizeof(double));
}
// Then access array elements like array1[ii][jj]
Тип 2:
double **array1;
int ii;
array1 = calloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
Тип 3:
double **array1;
int ii;
array1 = malloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
Насколько я понимаю, calloc
и malloc
, разница между двумя последними состоит в том, что calloc
обнулит все элементы массива, а malloc
- нет. Но являются ли первые два способа определения массива эквивалентными в памяти?
calloc
. Не знаю, есть ли реальная разница с Типом 1. - person JBL   schedule 23.05.2013double (*doubles2d)[N][M] = malloc(N*M*sizeof(double));
- person alk   schedule 23.05.2013malloc
не выделяет 2D-массив. Он выделяет необработанный кусок памяти (одномерный массив символов). За то, что вы с ним сделаете,malloc
не отвечает. - person n. 1.8e9-where's-my-share m.   schedule 15.10.2015