C语言 动态添加两个矩阵;第27和41行中错误

hec6srdp  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(106)
#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=]。这是我遇到的错误。

dgenwo3n

dgenwo3n1#

像这样的for循环

for(i=0; i<n; i++)
{
    p[i] = (int*)malloc(n * sizeof(int));
}

是错误的。您必须使用变量m(行数)而不是n(列数)

for(i=0; i<m; i++)
{
    p[i] = (int*)malloc(n * sizeof(int));
}

像这样的scanf的召唤

scanf("%d", ((p+i)+j));

也是错的。
你得写

scanf("%d", *(p+i)+j );

表达式*(p+i)+j等价于p[i] + j,也可以写成&p[i][j]
并且您应该在退出程序之前释放所有分配的内存。
一般来说,你应该检查变量mn的值是否有效,内存分配是否成功。如果变量mn是无符号整数类型,例如size_t,而不是有符号整数类型int,那就更好了。

相关问题