0

我必须使用 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");
}

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

4

1 回答 1

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;
}
于 2013-01-06T22:53:08.553 回答