我有一个整数变量x,我需要用它来制作两个2D数组,但是我得到一个错误“无法分配一个常量0的数组”。在做了一些研究后,我显然需要使用malloc,但我不知道如何将它应用到我目前的情况。
我需要的两个阵列:
int firMat[x][5];
int secMat[5][x];
答案 0 :(得分:1)
#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;
}
答案 1 :(得分:0)
如果你正在使用C99,这将有效。它将创建一个“可变长度数组”,遗憾的是,在C11中,VLA已被简化为“可选”。
为此使用malloc
,通常我会放弃双数组符号,并将内存视为平面一维数组,然后数组[i] [j]变为ptr [i * cols + j]。
答案 2 :(得分:0)
尝试初始化x,如下例所示
#define x 2 //outside the function
然后像这样使用x
int firMat[x][5];
int secMat[5][x];