Вы не назначаете mr_rows
и mr_cols
.Они должны быть установлены следующим образом:
mr_rows = m1_rows;
mr_cols = m2_cols;
Эта строка бесполезна:
mr[i][j] += m1[i][k] * m2[k][j];
Это будет доступ к элементам за пределами, не в последнюю очередь потому, что k
не инициализирован,Вам нужна эта строка кода внутри трех вложенных циклов.В самом деле, вы также можете свернуть код обнуления в это.
for(i=0; i<m1_rows; i++){
for(j=0; j<m2_cols; j++){
mr[i][j] = 0;
for(k=0; k<m1_cols; k++){
mr[i][j] += m1[i][k]*m2[k][j];
}
}
}
Кроме того, все ваши циклы освобождения памяти неправильны.Вместо
for(i=0; i<m1_rows; i++);{
free(m1[i]);
}
free(m1);
должно читаться
for(i=0; i<m1_rows; i++){
free(m1[i]);
}
free(m1);
Эта беспорядочная точка с запятой убивает вас.
Вам также необходимо проверить, что количество столбцов в m1
равно числу строк в m2
, т. Е. Проверить, что m1_cols == m2_rows
.
Одна последняя точка.Вы ужасно дублируете свой код здесь.Не используйте три одинаковых цикла for для выделения матрицы и три идентичных цикла for для освобождения.Извлеките эти операции в вспомогательные функции, которые можно вызывать из main
.
Это все, что я могу найти!