Вы делаете умножение математических матриц? Если так, то не должно быть:
for(i = 0; i < nr1; i++)
{
for(j = 0; j < nc1; j++)
{
c[i][k] = 0;
for(k = 0; k < nc2; k++)
{
c[i][k] += (a[i][j]) * (b[j][k]);
}
}
}
Мое полное и окончательное решение, протестированное для получения разумных результатов (я на самом деле не выполнял все вычисления вручную, чтобы проверить их) и без каких-либо полезных мелочей, таких как проверка работы выделения памяти,:
int **matrix_mult(int **a, int **b, int nr1, int nc1, int nc2)
{
int **c;
int i, j, k;
c = malloc(sizeof(int *) * nr1);
for (i = 0; i < nr1; i++)
{
c[i] = malloc(sizeof(int) * nc2);
for (k = 0; k < nc2; k++)
{
c[i][k] = 0;
for (j = 0; j < nc1; j++)
{
c[i][k] += (a[i][j]) * (b[j][k]);
}
}
}
return c;
}
В моем исходном ответе было несколько опечаток в ядре цикла for, главным образом из-за того, что меня вводил в заблуждение другой ответ. Они были исправлены для потомков.