#include "header.h" /* parses input file segment into Matrix */ int mcreator(Matrix * pA) { Matrix A; int i, n, m, size; /* determine size of matrix */ scanf("%d", &n); scanf("%d", &m); size = m*n; /* record matrix data */ float * arr; arr = malloc(size*sizeof(float)); for(i = 0; i < size; i++) { scanf("%f", &arr[i]); //printf("%f\n", arr[i]); } /* store recorded data */ pA->n = n; pA->m = m; pA->p = arr; A = *pA; printf("A.p[0] = %f\n", A.p[0]); // array successfully stored } /* reads Matrix */ /* TODO: Accessing array stored in matrix causes * segementation fault in this function, even though * accessing the array stored in matrix works fine at the * end of mcreator (line 29). */ void mreader(Matrix *pA) { Matrix A = *pA; int i, j, m = A.m, n = A.n; float *arr = A.p; printf("arr[1] = %f\n", arr[1]); // Segmentation Fault for(i = 0, j = 0; i < m*n; i++) { if(j < m) { printf("%f\t", arr[i]); j++; } else { printf("\n"); j = 0; } } } /* parses input file segment into vector */ Vector * vcreator(void) { Vector v, *pv; int j, size; /* get vector size */ scanf("%d", &size); /* get vector data */ float * arr = malloc(size * sizeof(float)); for(j = 0; j < size; j++) { scanf("%f", &arr[j]); } /* store vector data */ v.n = size; v.p = arr; pv = &v; return pv; } /* reads Vector */ void vreader(Vector *pv) { Vector v = *pv; int i, size = v.n; float * arr = v.p; for(i = 0; i < size; i++) { printf("v[%d] = %f\n", i, arr[i]); } printf("\n"); } /* frees Vector memory */ void vdestroy(Vector *pv) { Vector v = *pv; free(v.p); } /* frees Matrix memory */ void mdestroy(Matrix *pA) { Matrix A = *pA; free(A.p); }