I need to make a matrix product where the user must enter the dimensions and terms of the matrices, but the program simply stops working. Here is the code:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char const *argv[]){
int i, j, ja, linhasA, colunasA, linhasB, colunasB;
float **A;
float **B;
float **C;
printf("Insira o numero de linhas da matriz A:\n"); /* recebe o numero de Linhas de A */
scanf("%i", &linhasA);
printf("Insira o numero de colunas da matriz A:\n"); /* recebe o numero de Colunas de A */
scanf("%i", &colunasA);
A = malloc(linhasA * sizeof(int*)); /* Aloca A */
for (i = 0; i < linhasA; ++i)
{
A[linhasA] = malloc(colunasA * sizeof(int));
}
if(A == 0 || A == NULL){ /* verifica se foi possivel alocar a memoria desejada */
printf("Erro: nao foi possível alocar memoria solicitada \n");
exit(1);
}
printf("Insira o numero de linhas da matriz B:\n"); /* recebe o numero de Linhas de B */
scanf("%i", &linhasB);
printf("Insira o numero de colunas da matriz B:\n"); /* recebe o numero de Colunas de B */
scanf("%i", &colunasB);
B = malloc(linhasB * sizeof(int*)); /* Aloca B */
for (i = 0; i < linhasB; ++i)
{
B[linhasB] = malloc(colunasB * sizeof(int));
}
if(B == 0 || B == NULL){ /* verifica se foi possivel alocar a memoria desejada */
printf("Erro: nao foi possível alocar memoria solicitada \n");
exit(1);
}
/* Depois de alocados A e B, devemos alocar a matriz que conterá o resultado
com o numero de linhas de A e o numero de colunas de B */
C = malloc(linhasA * sizeof(int*));
for (i = 0; i < linhasA; ++i)
{
C[linhasA] = malloc(colunasB * sizeof(int));
}
if(C == 0 || C == NULL){ /* verifica se foi possivel alocar a memoria desejada */
printf("Erro: nao foi possível alocar memoria solicitada \n");
exit(1);
}
if(colunasA == linhasB){ /* verifica se a multiplicação é possivel */
printf("ok!\n");
}
else{
printf("as matrizes nao possuem uma dimenssao utilizavel\n");
return 0;
}
for (i = 0; i < linhasA; ++i) /* recebe e imprime A */
{
for (j = 0; j < colunasA; ++j)
{
printf("Digite o valor de A[%d][%d]\n", i+1, j+1);
scanf("%f", &A[i][j]);
}
}
printf("\n\n");
for (i = 0; i < linhasA; ++i)
{
for (j = 0; j < colunasA; ++j)
{
printf("%f ", A[i][j]);
}
printf("\n\n");
}
printf("\n\n");
for (i = 0; i < linhasB; ++i) /* recebe e imprime B */
{
for (j = 0; j < colunasB; ++j)
{
printf("Digite o valor de B[%d][%d]\n", i+1, j+1);
scanf("%f", &B[i][j]);
}
}
printf("\n\n");
for (i = 0; i < linhasB; ++i)
{
for (j = 0; j < colunasB; ++j)
{
printf("%f ", B[i][j]);
}
printf("\n\n");
}
printf("\n\n"); /* faz a multiplicação */
for (i = 0; i < linhasA; ++i)
{
for (j = 0; j < colunasB; ++j)
{
C[i][j] = 0;
for (ja = 0; ja < colunasA; ja++)
{
C[i][j] = C[i][j] + (A[i][ja] * B[ja][j]);
}
}
}
printf("\n\n"); /* imprime o resultado */
for (i = 0; i < linhasA; ++i)
{
for (j = 0; j < colunasB; ++j)
{
printf("%f ", C[i][j]);
}
printf("\n\n");
}
return 0;}