berechnen Fehlende Zahnspange.
for (i = 0; i < row1; i++) {
for (j = 0; j < col2; j++) { // added brace
suma = 0;
for (l = 0; l < row2; l++) { // added brace
suma += a[i][l] * bt[l][j];
} // added brace
c[i][j] = suma;
} // added brace
}
Die Streben sind auf der Innenseite nicht unbedingt notwendig aber wenn Sie immer Klammern verwenden, sind Sie weniger wahrscheinlich, dass diese besondere Fehler in der Zukunft zu machen.
Ohne die Klammern, sieht es so aus, richtig eingerückt:
for (i = 0; i < row1; i++) {
for (j = 0; j < col2; j++)
suma = 0;
// Note that j = col2, which means that we are accessing
// array elements out of bounds, which is an error.
for (l = 0; l < row2; l++)
suma += a[i][l] * bt[l][j];
c[i][j] = suma;
}
Diese mehr offensichtlich falsch ist. Eine weitere Möglichkeit, den Fehler weniger wahrscheinlich zu machen, ist die Variablen innerhalb der Schleifen zu bewegen:
for (int i = 0; i < row1; i++) {
for (int j = 0; j < col2; j++) {
double suma = 0;
for (int l = 0; l < row2; l++) {
suma += a[i][l] * bt[l][j];
}
c[i][j] = suma;
}
}
Auf diese Weise, wenn Sie die Klammern entfernen, wird eine Fehlermeldung angezeigt, weil j
nicht definiert ist. (Dies funktioniert nicht in C90, aber das ist alte Geschichte in diesen Tagen.)
http://stackoverflow.com/questions/6311309/how-can-i-multiply-two-matrices-in-c –