我想为一个2D数组动态分配内存。
这两者有什么区别吗?
(一)

array = (int**)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
    array[i] = (int *) malloc(size * sizeof(int));
}

2个)
array = (int**)malloc(size *size* sizeof(int));

如果是的话,什么更好用,为什么?

最佳答案

在第一种情况下

array = (int**)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
    array[i] = (int *) malloc(size * sizeof(int));
}

您正在分配大小等于sizesize * sizeof( int )范围,即您正在分配大小一维数组。因此,您将分配指向这些一维数组的第一个元素的大小指针。
在第二种情况下表达式
(int**)malloc(size *size* sizeof(int))

表示分配int类型对象的size*size范围,返回的指针被解释为int **。因此,这个表达式没有任何意义独立于赋值左侧的内容。考虑到指针的大小可以大于int的大小。
你可以改写
int ( *array )[size] = ( int (*)[size] )malloc(size *size* sizeof(int));

在这种情况下,如果大小是一个常量表达式,那么实际上是在分配一个二维数组。

10-08 08:26
查看更多