Răsfoiți Sursa

changed filter read getting seg fault

valentin 6 ani în urmă
părinte
comite
2200a9f34f
1 a modificat fișierele cu 6 adăugiri și 6 ștergeri
  1. 6 6
      src/prog.c

+ 6 - 6
src/prog.c

@@ -118,8 +118,8 @@ getDataFromSplitBinary (FILE *f, Matrix *ret)
     return 1;
 }
 
-static float*
-readFilterFromFile (int isSmooth, int n, int *filterlength)
+static int
+readFilterFromFile (int isSmooth, int n, float *filter, int *filterlength)
 {
     char filtname[64];
     if (n != 0)
@@ -136,10 +136,10 @@ readFilterFromFile (int isSmooth, int n, int *filterlength)
     }
 
     fseek (f, 0L, SEEK_END);
-    int size = ftell (f) / sizeof(float);
+    size_t size = ftell (f) / sizeof(float);
     rewind (f);
 
-    float filter[size];
+    filter = malloc (size * sizeof (float));
 
     fread (filter, sizeof(float), size, f);
 
@@ -147,7 +147,7 @@ readFilterFromFile (int isSmooth, int n, int *filterlength)
 
     *filterlength = size;
 
-    return filter;
+    return 1;
 }
 
 static void
@@ -392,7 +392,7 @@ filterData (int decimFactor, int isSmooth, Matrix * const input, Matrix *decimOu
 
     float *filter;
     int filterlength = 0;
-    filter = readFilterFromFile (isSmooth, decimFactor, &filterlength);
+    readFilterFromFile (isSmooth, decimFactor, filter, &filterlength);
         printf("%f\n", filter[0]);
 
     int length = input->width * input->height;