c - 用 malloc/calloc 初始化的二维数组

标签 c matrix malloc multidimensional-array

好的,我无法理解如何在 calloc 中使用 malloc 来初始化数组。我试图通过创建一个存储用户输入值的 2 * 3 矩阵来做一些练习。我不想更改的唯一部分代码是使用 **matrix 而不是 matrix[5][7]。有什么建议吗?

到目前为止,这是我的代码(我不断遇到段错误):

#include<stdio.h>
#include<stdlib.h>

main(){

    int i, j;

    int **mat = (int **)malloc(2 * 3 * sizeof(int*));

    for(i=0;i<2;i++)
      for(j=0;j<3;j++){

      printf("Input a value for Array[%d][%d]: ",i,j);

      scanf("%d",&mat[i][j]);

      }
    for(i=0;i<2;i++)
      for(j=0;j<3;j++)
        printf("%d\t",mat[i][j]);

}

编辑:感谢大家的帮助!我的代码现在可以正常工作了。这是它的样子:

#include<stdio.h>
#include<stdlib.h>

main(){

int i, j;

int **mat;

  mat = malloc(2 *sizeof(int *));

for(i=0;i<2;i++){

  mat[i] = malloc(3 *sizeof(int));

        for(j=0;j<3;j++){

        printf("Input a value for Array[%d][%d]: ",i,j);

        scanf("%d",&mat[i][j]);

        }
  }

for(i=0;i<2;i++)
  for(j=0;j<3;j++)
  printf("%d\t",mat[i][j]);

return 0;
}

如果有任何理由我应该进行更多编辑,请告诉我。

最佳答案

mat 是一个双指针。您需要为指针数组分配内存,然后分别为每个指针分配内存。

mat[0] = malloc(sizeof(int) *n ); /* n = Number of elements */

mat[0] 在写入之前应该分配一些内存。

然后你的 scanf() 你有 mat[i][j] 就有意义了。 无需强制转换 malloc()

关于c - 用 malloc/calloc 初始化的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27393598/

相关文章:

c - 在 c 中存储已知的键/值对

C - 指数函数导致文件 IO 出现段错误

c++矩阵重载不起作用

c++ - 使用一个类的两个单独实例时出现 Malloc 错误 2372

c - Struct realloc 内的动态字符串数组

c - 在C程序中自铸一个void指针指向int是否可能?

c - 不明白为什么 APUE 的代码片段会取消链接附加到客户端 unix 域套接字的文件

c - 在 C 中获取多维数组列的最有效方法

c - 如何使用 malloc 从 C 中的函数创建和返回二维矩阵?

c - 我的程序意外停止运行,并且无法释放变量