Не могу понять из-за чего ошибка: Invalid read of size 8 (valgrind)
Код делает следующее: в матрице заданных размеров находит столбцы, в которых есть элементы, равные среднему арифметическому элементов столбца, в котором этот элемент, и удаляет эти столбцы, далее выводит в исправленном виде.
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
int main()
{
int row,col,i,j;
float **a,sum;
char c;
bool *flag;
FILE *fin,*fout;
fin=fopen("s.txt","r");
fout=fopen("data.txt","w");
if(!fin)
{
printf("File doesn't exist.");
fclose(fout);
return -1;
}
if(fscanf(fin,"%d",&row)!=1)
{
if(fscanf(fin,"%c",&c)!=1)
{
printf("File's empty.");
fclose(fin);
fclose(fout);
return -1;
}
else
{
printf("Invalid input data.");
fclose(fin);
fclose(fout);
return -1;
}
}
if(fscanf(fin,"%d",&col)!=1)
{
printf("Invalid input data.");
fclose(fin);
fclose(fout);
return -1;
}
if(row<1 || col<1)
{
printf("Invalid input data.");
fclose(fin);
fclose(fout);
return -1;
}
a=(float**)malloc(col*sizeof(float*));
for(i=0;i<row;i++)
a[i]=(float*)malloc(col*sizeof(float));
for(i=0;i<row;i++)
for(j=0;j<col;j++)
if(fscanf(fin,"%f",&a[i][j])!=1)
{
for(i=0;i<row;i++)
free(a[i]);
free(a);
fclose(fin);
fclose(fout);
printf("Invalid input data.");
return -1;
}
if(fscanf(fin,"%c",&c)==1)
{
for(i=0;i<row;i++)
free(a[i]);
free(a);
fclose(fin);
fclose(fout);
printf("Invalid input data.");
return -1;
}
flag=(bool*)malloc(col*sizeof(bool));
for(j=0;j<col;j++)
flag[j]=0;
for(j=0;j<col;j++)
{
sum=0;
for(i=0;i<row;i++)
sum+=a[i][j];
for(i=0;i<row;i++)
if(fabs(row*a[i][j]-sum)<1e-7)
flag[j]=1;
}
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
if(flag[j]==0)
fprintf(fout,"%.2f ",a[i][j]);
fprintf(fout,"\n");
}
for(i=0;i<row;i++)
free(a[i]);
free(a);
free(flag);
fclose(fin);
fclose(fout);
return 0;
}