I am trying to implement matrix multiplication in C. I am getting segmentation fault error if i use matrix size more than 3. For 2x2 matrix this code it working perfectly. I'm trying to figure out the reason for this.
Here is my code. Please have a look at it and let me know where I'm doing wrong.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
matrix data structure.
rs = row start
re = row end
cs = column start
ce = column end
a = pointer to array of pointers
*/
typedef struct _matrix {
int rs;
int re;
int cs;
int ce;
int **a ;
}matrix;
matrix random_matrix(int n)
{
matrix random;
int i, j, k;
random.a = (int **)malloc(sizeof(int *) * n);
for (k=0; k < n; k++)
random.a[k] = (int *)malloc(n * sizeof(int));
random.cs = random.rs = 0;
random.ce = random.re = n -1;
for(i=0; i < n; i++){
for(j = 0; j < n; j++){
random.a[i][j] = rand()/108108108.0;
}
}
return random;
}
void display(matrix m)
{
int i, j;
for (i=m.rs ; i<=m.re ; i++) {
for (j=m.cs ; j<=m.ce ; j++) {
if(j==m.ce)
printf("%d", m.a[i][j]);
else
printf("%d, ", m.a[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
matrix multiply(matrix m1, matrix m2)
{
int n = m1.re - m1.rs;
matrix result;
result.rs = result.cs = 0;
result.re = result.ce = n;
result.a = (int **)malloc(sizeof(int *) * n);
for (int k=0; k < n; k++)
result.a[k] = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
float sum = 0;
for (int k = 0; k < n; k++)
sum += m1.a[i][k] * m2.a[k][j];
result.a[i][j] = sum;
}
}
return result;
}
int main(void)
{
srand(time(NULL));
matrix m1 = random_matrix(3);
matrix m2 = random_matrix(3);
display(m1);
display(m2);
printf(" RESULT \n");
display(multiply(m1, m1));
return 0;
}