c - 单独使用指针和malloc,如何定义二维int数组?我的似乎不起作用。 (段错误)

标签 c

我想在 .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/

相关文章:

c - 提高求和的性能(C 版本)

C 64 位左移失败

c - 将带有 void 指针参数的函数指针传递给函数

c - 我怎样才能导致指令缓存未命中?

c - C 中的嵌套链表

c - XOR交换算法和使用第三个变量交换之间有什么区别吗?

objective-c - C 数组与 Obj-C 数组

c - 循环与其他循环的交互

c - 如何使用 fscanf 读取文件

c - 从动态分配的二维数组中获取值