C 有人能帮我调试这个2D阵列吗?

C 有人能帮我调试这个2D阵列吗?,c,hash,C,Hash,我试图增加2D数组的大小,hm是一个包含数组x长度的结构。我使用值-99999991表示数组的结尾 这是正确的方法吗 hm->value = realloc(hm->value,(hm->x+1)*sizeof(int)); hm->value[hm->x] = malloc(sizeof(int)); hm->value[hm->x][0] = -999999991; hm-&g

我试图增加2D数组的大小,hm是一个包含数组x长度的结构。我使用值-99999991表示数组的结尾

这是正确的方法吗

 hm->value = realloc(hm->value,(hm->x+1)*sizeof(int));
            hm->value[hm->x] = malloc(sizeof(int));
            hm->value[hm->x][0] = -999999991;
            hm->value[hm->x-1] = realloc(hm->value[hm->x-1],2*sizeof(int));
            hm->value[hm->x-1][1] = -999999991;
            hm->value[hm->x-1][0] = value;

如果可以调整2D数组的大小,则没有2D数组,而是有一个指向int的指针

数组:

int A[n][m];
Accessing the array: A[2][3] = 4; // Equivalent to *(A + 2*m + 3)
大小可变的二维“阵列”:

编译器不知道数组是一维的,还是二维的,那么二维的大小是多少。它不能再计算这个了。 此外,realloc无法将数据放在正确的位置。考虑一个2x2 2D数组到2x3 2D数组:

int **A;
A = malloc(n*m*sizeof(int));
A[2][3] = 4; // Equivalent to *A + 2*??? + 3)
int **A = {{0,1}, {2,3}}; // for berevity - this isn't valid C!
// stored in memory as [0,1,2,3]
A = realloc(A, 2*3* sizeof(int));
存储在内存中的新数组是[0,1,2,3,];这需要复制数据

有两个不错的解决方案(尽管它们并不漂亮): 1) 将二维阵列视为一维阵列的列表

int **A;
A = malloc(m*sizeof(void *));
for (i = 0; i < m; ++i) {
    A[i] = malloc (n*sizeof(int);
}

在第二个示例中,我们总是在2D数组的末尾增长(因此,我从2x2到2x3的示例是非法的-第二个2是固定长度)。

它像内存中的多边形,还是只是一个“矩形”?它在数组中的数组。我想你可以称之为矩形……对,我的意思是“2d”分配通常只是
malloc(x\u dim*y\u dim*sizeof(element\u t))
。这是完全不同的。也许你应该更详细地描述你的用例。
#define M 16
int **A;
A = malloc(M*n*sizeof(int)); // realloc also works
// access an element:
*(A + 3*M + 2) = 4; // (3*M is compile time constant)