C 2D数组(指针到指针)
我想用随机数填充2D数组,然后在C 2D数组(指针到指针),c,C,我想用随机数填充2D数组,然后在main函数中调用它并打印它。但是我无法从main访问函数FillMatrix #define R 12 //row #define S 10 //column void FillMatrix(int m[][S], int row); int main(int argc, char *argv[]) { int i, j; time_t t; // POINTER TO POINTER int **mat = (int **)
main
函数中调用它并打印它。但是我无法从main
访问函数FillMatrix
#define R 12 //row
#define S 10 //column
void FillMatrix(int m[][S], int row);
int main(int argc, char *argv[])
{
int i, j;
time_t t;
// POINTER TO POINTER
int **mat = (int **)malloc(R * sizeof(int *));
if ((mat = (int**)malloc(R*sizeof(int))) == NULL)
{
printf("Error");
return 0;
}
for (i = 0; i<R; i++)
mat[i] = (int *)malloc(S * sizeof(int));
FillMatrix(mat, R); //<- This line is the problem
// RAND 0 - 1000
}
void FillMatrix(int m[][S], int row)
{
int i, j;
time_t t;
srand((unsigned)time(&t));
for (i = 0; i < row; i++)
for (j = 0; j < S; j++)
m[i][j] = rand() % 1000 + 0;
}
#定义R 12//行
#定义s10//列
无效填充矩阵(int m[][S],int行);
int main(int argc,char*argv[])
{
int i,j;
时间;
//指针到指针
int**mat=(int**)malloc(R*sizeof(int*);
if((mat=(int**)malloc(R*sizeof(int)))==NULL)
{
printf(“错误”);
返回0;
}
对于(i=0;i嗯,你的代码有点不正确。我假设你的主函数在inti,j;
之前开始,在调用FillMatrix(mat,R);
之后结束
如果是这种情况,那么您需要在启动主函数之前移动FillMatrix的函数定义,或者需要在主函数之前向前声明FillMatrix函数
问题是您的主要功能无法“查看”你的FillMatrix函数。顺序非常重要。如果某个东西没有被声明、定义,或者没有以某种方式显示在问题点上存在,那么就编译器而言它就不存在了。把它想象成在函数中声明某个变量之前试图访问某个变量。(mat=(int**)malloc(R*sizeof(int))
分配了错误的空间量;类型应为sizeof(int*)
或等效的sizeof*mat
。此外,您还泄漏了刚才在前一行分配的内存
要解决此问题,请将if((mat=(int**)malloc(R*sizeof(int)))==NULL)
更改为if(mat==NULL)
另外,int**
与int[][S]
不兼容int**
表示一个数组,其中每一行都是单独的分配,但是int[][S]
表示一个连续的内存块。您必须选择要使用的这两种方法中的哪一种
如果要使用单独的行,则将函数更改为void FillMatrix(int**m,int row)
(最好将列数作为参数,而不是使用全局S
)
或者如果您想使用相邻内存块,将分配行更改为<代码> int(*Mat)[S]]MALOC(R*sieZOF*Mat);尝试/>代码>空格填充矩阵(int M[[][IN]行),主要之前。您想要C还是C++答案?C=C++,一般来说,您只应该标记您正在编写/编译的语言。(例如,在C++中选择容器类,然后在执行原始内存分配之前使用智能指针,而在C中,你不应该把代码的结果写在<代码> MalOC/<代码>)。我想在C.中回答,我编辑了代码,所以现在有一个main函数。我把函数改为“无效fimMatLL(int m,int行)”。“无法将参数从'int'转换为'int[][S]'”。如果出现此错误,则实际上并没有像您所说的那样更改函数。可能您忘记更改原型和定义