Не могу понять из-за чего ошибка: 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;
}

Ответы (0 шт):