具有功能c的动态矩阵

时间:2013-01-06 22:48:26

标签: 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");
}

但它崩溃说有问题。哪里? :(

1 个答案:

答案 0 :(得分:1)

当您将&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;
}