【发布时间】:2020-08-11 02:47:07
【问题描述】:
我要编写一个对矩阵进行卷积的程序,但首先我需要创建这个矩阵并用随机数加载它,但是在我的方法中,我收到了警告,我无法解决这个问题,因为我是新手这和这会让我发疯的
#include <stdio.h>
#include <stdlib.h>
#define ROW 5
#define COL 5
// Create a Matrix
int **generateMatrix(int row, int col){
int **mat;
mat=(int**)malloc(sizeof(int*)*row);
for(int i=0;i<row;i++){
mat[i]=(int*)malloc(sizeof(int)*col);
}
if(mat==NULL){
printf("Insufficient Memory...");
return 0;
}
return mat;
}
// Load a Matrix
int loadMatrix(int *x[][COL], int row, int col){
int i;
for(int r=0;r<row;r++){
for(int c=0;c<col;c++){
x[r][c]=rand()%256;
}
}
return x;
}
// Print a Matrix
void printMatrix(int *x[][COL], int row, int col){
for(int r=0;r<row;r++){
for(int c=0;c<col;c++){
printf("\t%d", x[r][c]);
}
printf("\n");
}
}
int main(){
int **matrix, **kernel;
// Create the Matrix
matriz=generateMatrix(ROW, COL);
kernel=generateMatrix(3,3);
// Load the Matrix
loadMatrix(matrix, ROW, COL);
loadMatrix(kernel, 3, 3);
// Print Matrix
printf("Matrix\n");
printMatrix(matrix, ROW, COL);
printf("\n");
printf("Kernel\n");
printMatrix(kernel, 3, 3);
printf("\n");
free(matrix);
free(kernel);
}
我收到的警告如下
main.c:25:20: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
main.c:28:14: warning: return makes integer from pointer without a cast [-Wint-conversion]
main.c:35:22: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
main.c:49:18: warning: passing argument 1 of ‘loadMatrix’ from incompatible pointer type [-Wincompatible-pointer-types]
main.c:21:9: note: expected ‘int * (*)[5]’ but argument is of type ‘int **’
main.c:50:18: warning: passing argument 1 of ‘loadMatrix’ from incompatible pointer type [-Wincompatible-pointer-types]
main.c:21:9: note: expected ‘int * (*)[5]’ but argument is of type ‘int **’
main.c:54:19: warning: passing argument 1 of ‘printMatrix’ from incompatible pointer type [-Wincompatible-pointer-types]
main.c:32:10: note: expected ‘int * (*)[5]’ but argument is of type ‘int **’
main.c:58:19: warning: passing argument 1 of ‘printMatrix’ from incompatible pointer type [-Wincompatible-pointer-types]
main.c:32:10: note: expected ‘int * (*)[5]’ but argument is of type ‘int **’
【问题讨论】:
-
int *x[][COL]应该是int **x(两个地方)。该参数应与您传递给它的类型匹配(即int **) -
您对
if (mat == NULL)的检查为时已晚(它应该在循环之前,而不是在循环之后),并且您也不会检查分配每一行是否失败。 -
请注意,您不应编辑问题以使错误消息不再准确 - 您不会更新问题以包含答案(除非您还保留原始代码并解释修改的原因代码是正确的)。