#include<stdio.h>
#include<stdlib.h>
int** addMatrix(int**, int, int, int**);
int main(void)
{
int i, j, m, n, **p, **q, **sum; //i = row, j = column
printf("Enter the size of the row: ");
scanf("%d", &m);
printf("Enter the size of the col: ");
scanf("%d", &n);
p = (int**)malloc(m * sizeof(int*));
for(i=0; i<n; i++)
{
p[i] = (int*)malloc(n * sizeof(int));
}
printf("Enter the elements of the Matrix M:\n"); //taking input
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d", ((p+i)+j)); // LINE 27
}
q = (int**)malloc(m * sizeof(int*));
for(i=0; i<n; i++)
{
q[i] = (int*)malloc(n * sizeof(int));
}
printf("Enter the elements of the Matrix N:\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
scanf("%d", ((q+i)+j)); // LINE 41
}
sum = addMatrix(p, m, n, q);
printf("Vector Sum:\n");
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf("%d ", *(*(sum+i)+j));
printf("\n");
}
}
int** addMatrix(int **p, int m, int n, int **q)
{
int i, j, **add;
add = (int**)malloc(m * sizeof(int*));
for(i=0; i<n; i++)
{
add[i] = (int*)malloc(n * sizeof(int));
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
*(*(add+i)+j) = *(*(p+i)+j) + *(*(q+i)+j);
}
return add;
}
主视图c:27:21:警告:格式“%d”需要类型为“int ”的参数,但参数2的类型为“int*”[-Wformat=] main。c:41:21:警告:格式“%d”需要类型为“int ”的参数,但参数2在用于获取矩阵输入的行中具有类型“int*”[-Wformat=]。这是我遇到的错误。
1条答案
按热度按时间dgenwo3n1#
像这样的for循环
是错误的。您必须使用变量m(行数)而不是n(列数)
像这样的scanf的召唤
也是错的。
你得写
表达式
*(p+i)+j
等价于p[i] + j
,也可以写成&p[i][j]
。并且您应该在退出程序之前释放所有分配的内存。
一般来说,你应该检查变量
m
和n
的值是否有效,内存分配是否成功。如果变量m
和n
是无符号整数类型,例如size_t
,而不是有符号整数类型int
,那就更好了。