我有一个关于calloc的内存分配问题。我看了这个问题,但它没有解释在动态分配二维数组的情况下内存是如何分配的。
我想知道下面三种动态分配二维数组的方式之间是否有内存表示上的区别。
类型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]
第三种类型:
double **array1;
int ii;
array1 = malloc(10 * 10, sizeof(double *));
// Then access array elements like array1[ii + 10*jj]
据我所知,calloc
和malloc
的区别在于:calloc
会将数组的所有元素都清零,而malloc
则不会。但是,这两种定义数组的方式在内存中是否等效呢?
malloc
不会分配一个二维数组,它只会分配一块原始的内存空间(一个一维字符数组)。你如何使用这块内存并不是malloc
的责任。 - n. m.