【发布时间】:2016-07-22 09:49:47
【问题描述】:
我正在用 C 语言制作一个矩阵乘法计算器。当我运行它时,会喷出许多数字,结果如下:
57736 segmentation fault
我哪里写错了?这是我写的代码:
int Mtx1row, Mtx1col, Mtx2row, Mtx2col, c, d, e;
int first[10][10], second[10][10], mult[10][10];
获取第一个矩阵行和列
printf("First Matrix: # of row and col?\n");
scanf("%d%d", &Mtx1row, &Mtx1col);
获取第二个矩阵行和列
printf("Second Matrix: # of row and col?\n");
scanf("%d%d", &Mtx2row, &Mtx2col);
比较第一个矩阵列与第二个矩阵行
if (Mtx1col != Mtx2row){
printf("Mtx1col != Mtx2row (x _ x)\n");
return 1;
}
获取第一个矩阵的元素
printf("Enter elements of First Matrix: \n");
for (c = 0; c < Mtx1row; c++)
for (d = 0; d < Mtx1col; d++)
{
printf("\tEnter element %d%d: ", c+1, d+1);
scanf("%d", &first[c][d]);
}
获取第二个矩阵的元素
printf("Enter elements of Second Matrix: \n");
for (c = 0; c < Mtx2row; c++)
for (d = 0; d < Mtx2col; d++)
{
printf("\tEnter element %d%d: ", c+1, d+1);
scanf("%d", &second[c][d]);
}
将矩阵 1 和 2 相乘并存储到矩阵积中
for (c=0; c < Mtx2row; c++){
for (d=0; d < Mtx2col; d++){
for (e=0; e < Mtx1col; e++){
mult[c][d] += first[c][d] * second[d][e];
}
}
}
【问题讨论】:
-
您没有显示分配这些矩阵的代码的任何部分,也没有显示任何会“喷出”任何东西的代码。调试器在哪里说崩溃发生了?
-
你写的代码比这还多。您正在假设您的错误在哪里。这些数组是从哪里来的?
-
总是检查scanf的返回值
-
我想你检查一下用户没有输入大于 10 的尺寸?
-
您是否使用调试器逐步完成了此操作?如果你这样做了,你就会知道正在使用 Mtx1row、Mtx1col 等的哪些值。
标签: c matrix matrix-multiplication