我必须使用 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/