This just segfaults, but most likely for the same reason...
Code:
#include <stdio.h>
#include <stdlib.h>
double **readTimeStep(FILE *input, double **particleMatrix,int N)
{
int i;
particleMatrix = (double**) realloc(particleMatrix, N * sizeof(double*));
if (particleMatrix == NULL)
{
printf("error allocating memory for particleMatrix");
abort();
}
for (i = 0; i < N; i++)
{
particleMatrix[i] = (double *) realloc(particleMatrix[i], 4 * (sizeof(double)));
if (particleMatrix[i] == NULL)
{
printf("error allocating memory for particleMatrix[i]");
abort();
}
}
///
for (i = 0; i < N && fscanf(input,"%*s %lf %lf %lf %lf",&particleMatrix[i][0],&particleMatrix[i][1],&particleMatrix[i][2],&particleMatrix[i][3]) != EOF; i++)
{
printf("%f\t%f\t%f\t%f\n",particleMatrix[i][0],particleMatrix[i][1],particleMatrix[i][2],particleMatrix[i][3]);
}
return particleMatrix; //reallocate matrix for each N during loop
}
int main()
{
double **particleMatrix;
FILE *input;
int N,i;
double time;
input = fopen("allbodys.xyz","r");
if (input == NULL)
{
printf("input file open failed\n");
abort();
}
fscanf(input,"%d",&N);
fscanf(input,"%*s %*s %*d %*s %*s %*s %*s %*s %*s %*s %*s %lf",&time);
particleMatrix = readTimeStep(input,particleMatrix,N);
fclose(input);
for (i = 0; i < N; i++)
{
free(particleMatrix[i]);
}
free(particleMatrix);
}