我有一个整数变量x,我需要用它来制作两个2D数组,但我得到了一个错误"无法分配一个常量大小为0的数组"。在做了一些研究之后,我显然需要使用malloc,但我不知道如何将其应用于我目前的情况。
我需要两个阵列:
int firMat[x][5];
int secMat[5][x];
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int x = 2;
int **firMat;//int firMat[x][5];
int **secMat;//secMat[5][x];
int i;
firMat = malloc(x * sizeof(int*));
for(i = 0; i< x; ++i)
firMat[i] = malloc(5 * sizeof(int));
secMat = malloc(5 * sizeof(int*));
for(i = 0; i< 5; ++i)
secMat[i] = malloc(x * sizeof(int));
//do stuff E.g. fir[2][1] = 21;
//release E.g.
//for(i = 0; i< x; ++i)
// free(firMat[i]);
//free(firMat);
return 0;
}
如果您使用C99,这将起作用。它将创建一个"可变长度数组",遗憾的是,在C11中,VLA已减少为"可选"。
为了使用malloc
,通常我会放弃双数组表示法,将内存视为平面一维数组,然后数组[I][j]变为ptr[I*cols+j]。
尝试像下面的示例中那样初始化x
#define x 2 //outside the function
然后像这个一样使用x
int firMat[x][5];
int secMat[5][x];