我想在 .h
文件中声明二维数组,没有给定数量的 COLS 或 ROWS(因为它们是从 main()
内部的某处读取的)
我的意思是我可以尝试另一种方法,如下所示 如果直接给出 ROWS 和 COLS 之一。
int COLS = 20;
int (*array)[COLS];
array = malloc((*array) * ROWS);
因此我尝试如下:
below is 2d.h
int* a;
int** b;
int size;
below is test2d.c, inside int main(){}
read_size() //size value read from some file
a = malloc(sizeof(int) * size);
b = malloc(sizeof(*a) * size);
for(int i=0; i<size; i++){
for(int j=0; j<size; j++){
b[i][j] = i+j;
printf("ok");
}
}
//print all
应该打印所有 0112,但结果是 segmentation fault
。
最佳答案
要分配二维数组,您需要分配二维指针 b
,您已经完成了。之后,您需要在 for 循环中为 b[i]
分配内存,如下所示
// cols and rows are input by user or other parts of program.
int **b;
b = malloc(sizeof(int*) * rows);
for(int i=0; i<rows; i++){
b[i] = malloc(sizeof(int) * cols);
}
对此的解释是b
是一个指向int的指针数组。在 b
的每个元素中,您分配一个 int
数组。这为您提供了一个二维数组。
关于c - 单独使用指针和malloc,如何定义二维int数组?我的似乎不起作用。 (段错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56490023/