我正在尝试制作一个将2个矩阵乘以一个新矩阵的函数,它几乎已经完成但是我很难弄清楚这条线的错误
以下是代码:
#include<stdio.h>
#include<stdlib.h>
#define ROWS_1 3
#define ROWS_2 3
#define COLS_1 3
#define COLS_2 2
int* matrixMultiply(int mat1[ROWS_1][COLS_1],int mat2[ROWS_2][COLS_2])
{
int mul = (ROWS_1)*(COLS_2);
int* ArrofRows;
int sum=0,i,j,k;
***ArrofRows = (int*)malloc(mul)*sizeof(int);***
if (COLS_1 != ROWS_2)
{
printf("ERROR!! Operation Failed!Exiting...\n");
exit(0);
}
else
{
for( i=0 ; i<ROWS_1 ; i++)
{
for( j=0 ; j<COLS_2 ; j++)
{
for( k=0 ; k<COLS_1 ; k++)
{
sum += (mat1[i][k]*mat2[k][j]);
}
ArrofRows[(i*ROWS_1)+j] = sum;
sum = 0;
}
}
}
}
void main()
{
int mat1[ROWS_1][COLS_1] = {{2,6,9},{3,5,4},{6,7,8}};
int mat2[ROWS_2][COLS_2] = {{2,4},{6,1},{4,8}};
int* NewMat;
NewMat = matrixMultiply(mat1,mat2);
}
答案 0 :(得分:4)
在您的代码中
ArrofRows = (int*)malloc(mul)*sizeof(int);
应该是
ArrofRows = malloc(mul *sizeof(int));
或者,为了更好,
ArrofRows = malloc(mul *sizeof(*ArrofRows));
as,您希望为mul
或sizeof(int)
给出的sizeof(*ArrofRows)
次大小的内存分配内存。
否则,正如当前编写的那样,您试图将指针(返回值malloc()
)相乘,这是无效的。
FWIW,引用乘法运算符(*
)的属性,来自C11
,章节§6.5.5,
每个操作数都应具有算术类型。 [..]
并且指针不是算术类型。因此错误。
也就是说,在使用返回的指针之前,总是通过检查返回值为NULL来检查malloc()
是否成功。
另请参阅why not to cast the return value of malloc()
and family
最后,我了解此代码可能只是一个片段,但在这种情况下,您的matrixMultiply()
函数应该返回一个值。