c - 具有函数 c 的动态矩阵

标签 c function dynamic matrix malloc

我必须使用 C 中的函数创建一个动态矩阵。我做了这个:

#include <stdio.h>
#include <malloc.h>
int r=3;
int c=3;
int i;
void matrix(int *** m)
{
    m=(int***)malloc(r*sizeof(int*));
    for(i=0; i<c;i++)
    {
       m[i]=(int**)malloc(c*sizeof(int));
    }
};
int main()
{
    int **mat;
    matrix(&mat);
    mat[0][0]=1;
    mat[0][1]=2;
    printf("%d %d", mat[0][0], mat[0][1]);
    system("pause");
}

但是它崩溃了,说有问题。在哪里? :(

最佳答案

当你经过&mat时至matrix***m表示m保存位置 mat 。即mat = *m 。考虑到这一点,您必须按以下方式更改 malloc。

void matrix(int *** m)
{
    //m=(int***)malloc(r*sizeof(int*));
    *m = (int **)malloc(r*sizeof(int*));
    for(i=0; i<c;i++)
    {
       //m[i]=(int**)malloc(c*sizeof(int));
       (*m)[i]=(int*)malloc(c*sizeof(int)); // it was *m[i]=..
    }
}

编辑修正了一个错误

编辑 正如 Johnathan 在评论中提到的,实现此功能的更好方法如下。

int **matrix(int rows, int cols)
{
    int i, j;
    int **mat = (int **)malloc(rows * sizeof(int *));
    for (i = 0; i < rows; i++) {
       mat[i] = (int *)malloc(cols * sizeof(int));
       // If you prefer to initialize values, uncomment the following line
       // for(j = 0; j < cols; j++) mat[i][j] = 0;
    }
    return mat;
}

关于c - 具有函数 c 的动态矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187632/

相关文章:

c - openmpi:如何将未连接的数据 block 从一个等级发送到所有其他等级?

javascript - 是否有任何 javascript 函数,甚至在 jQuery 库中与 PHP print_r() 功能相同?

c - C中使用Malloc正确分配二维数组

c - 设置线程ID

c++ - 新安装 MinGW 问题,包含编译和可执行文件

c++ - 程序只读取第一行! C++

c - 动态内存分配实践

c# - 处理 DynamicObject 缺失成员的首选方法是什么?

c - 使用 enif_resource_alloc 正确释放内存

Javascript onclick 事件未在 Firefox 中触发