我必须使用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");
}
但它崩溃说有问题。哪里? :(
答案 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;
}