如何为二维数组动态分配内存

时间:2013-06-16 15:07:25

标签: c dynamic-arrays

我最近去过一次采访,他们让我写了一个程序,为二维数组动态分配内存(i = 3和j = 2)

3 个答案:

答案 0 :(得分:8)

int *a = (int*)malloc(i*j*sizeof(int));

您可以使用a[k][l]

获取a[k*i+l];

答案 1 :(得分:1)

有些人会讨厌这个,但这是我的最爱。主要优点是可以通过单个free取消分配,并且仍允许通过A[r][c]进行访问。

#include <stdlib.h>

int main(void)
{
        int num_row = 3, num_col = 2, r;
        int ** A;

        A = malloc(num_row*(sizeof(*A)+num_col*sizeof(**A)));

        for (r = 0; r < num_row; r++)
        {
                A[r] = (int*)(A+num_row)+r*num_col;
        }

        /* Accessing element at row r and column c is through:
         *
         *      A[r][c].
         */

        free(A);

        return 0;
}

答案 2 :(得分:0)

int i = 3;
int j = 2;

int** a = malloc(i * sizeof(int*));

for (unsigned int k = 0; k < i; k++) {
    a[k] = malloc(j * sizeof(int));
}

// Now you can use it.
a[0][0] = 0;
a[2][1] = 3;

在提出问题之前,您是否尝试过搜索SO问题数据库?