title: SIGABRT in on fclose?
body: <p>I am having trouble getting some C code to run correctly (please bear with me if this question is stupid, as I'm new to C; additionally, so everyone is clear, this is code I am having trouble running.  The only part I've written is the null filehandle check).  Basically, my program is crashing on <code>fclose</code>.  Code first:</p>
  
  <p>At the top of the file:</p>
  
  <pre><code>int *label;
  </code></pre>
  
  <p>Method specific:</p>
  
  <pre><code>void load_dat ()
  {
    int    i, j, t, k;
    FILE   *in;
    char   t_file[16];
  
    printf ("\nName of Raw Data File &gt; ");
    scanf ("%s", t_file);
    in = fopen (t_file, "r");
    if (in == NULL){
      perror("fopen error");
    }
   fscanf (in, "%d %d %d", &amp;num_pats, &amp;a_length, &amp;b_length);
  
   dpt = (float **) malloc (sizeof(float *)*num_pats);
  
   for (k=0; k&lt;num_pats; k++){
      dpt[k] = (float *) malloc (sizeof(float)*(a_length+b_length));
   }
  
   label = (int *) malloc (sizeof(int)*num_pats);
  
    for (i=0; i&lt;num_pats; i++)
    {
        for (j=0; j&lt;a_length; j++)
        {
          fscanf (in, "%f", &amp;dpt[i][j]);
        }
  
    fscanf (in, "%d", &amp;label[i]);
  
  
    if (label[i]&lt;0 || label[i]&gt;3)
      printf ("ERROR: Label corrupted.\n");
  
      for (t=0; t&lt;b_length; t++){
          dpt[i][t+a_length] = 0.0;
          dpt[i][label[i]+a_length] = 1.0;
      }
    }
    fclose (in); 
  }      
  </code></pre>
  
  <p>My error message from the program is: <code>Abort trap: 6</code>.  Googling for this eventually led to the suggestion that I use <code>GBD</code>, which gave me:</p>
  
  <pre><code>Program received signal SIGABRT, Aborted.
  </code></pre>
  
  <p>And</p>
  
  <pre><code>#0  0x00007fff8c12582a in __kill ()
  #1  0x00007fff871a3b6c in __abort ()  
  #2  0x00007fff871a0070 in __stack_chk_fail ()
  #3  0x000000010000175f in load_dat ()
  #4  0x0000000100001baa in main ()
  #5  0x00000001000013e4 in start ()
  </code></pre>
  
  <p>If I step through the entire method, the program doesn't crash until I reach the final line <code>fclose(in)</code>.  Also, the value for <code>in</code> remains the same throughout the program.</p>
  
  <p>Searching for problems with <code>fclose</code>, I came across <a href="https://stackoverflow.com/questions/2334352/why-do-i-get-a-sigabrt-here">this SO post</a>, which led me to try using <code>Valgrind</code>, the output of which (using <code>--leak-check=yes</code>) is:</p>
  
  <pre><code>==22688== 
  ==22688== Process terminating with default action of signal 6 (SIGABRT)
  ==22688==    at 0x2DD82A: __kill (in /usr/lib/system/libsystem_kernel.dylib)
  ==22688==    by 0x18A06F: __stack_chk_fail (in /usr/lib/system/libsystem_c.dylib)
  ==22688==    by 0x10000175E: load_dat (in ./dataPre) 
  ==22688==    by 0x100001BA9: main (in ./dataPre)
  ==22688== 
  ==22688== HEAP SUMMARY:
  ==22688==     in use at exit: 28,781 bytes in 83 blocks
  ==22688==   total heap usage: 84 allocs, 1 frees, 32,877 bytes allocated
  ==22688== 
  ==22688== LEAK SUMMARY:
  ==22688==    definitely lost: 0 bytes in 0 blocks
  ==22688==    indirectly lost: 0 bytes in 0 blocks
  ==22688==      possibly lost: 0 bytes in 0 blocks
  ==22688==    still reachable: 28,781 bytes in 83 blocks
  ==22688==         suppressed: 0 bytes in 0 blocks
  ==22688== Reachable blocks (those to which a pointer was found) are not shown.
  ==22688== To see them, rerun with: --leak-check=full --show-reachable=yes
  ==22688== 
  ==22688== For counts of detected and suppressed errors, rerun with: -v
  ==22688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
  Abort trap: 6
  </code></pre>
  
  <p>At this point I am at a loss as to where to look or what to do.</p>
  
  <p>Sample data:</p>
  
  <pre><code>44  96  3                                                                                                                                                                                                                                                                                                                                                                                       
  0   0   17.57298681 24.18012088 0   24.07599728 0   0   0   19.53417371 22.61467731 15.5650829  18.65720893 21.70631048 26.8811321  23.88086356 23.73544942 0   0   22.63088094 21.11777268 22.06847477 22.38688445 19.6794802  20.95594497 22.56472976 15.5058779  0   16.89366861 21.23974633 0   19.01608872 22.58492673 22.39564384 18.17000387 0   0   25.85404904 23.80483437 22.64271243 0   17.09819014 24.60634479 0   24.74696139 29.27117194 20.8931952  19.08648917 23.95167438 0   0   17.2386599  0   0   23.22304254 22.86712074 0   21.45687449 21.45146304 0   0   0   20.98717232 0   18.09871479 17.8226754  23.72508288 23.34563846 21.26201041 17.44038043 22.49848573 18.99848797 16.43222002 14.8132735  22.28093734 17.78931496 0   20.46914933 17.87742323 21.07936723 23.52102135 0   17.90498094 21.93199281 0   0   16.3020812  0   18.17972854 16.43234906 19.0756696  0   0   22.98048214 23.22184013 21.54024161 0
  </code></pre>
  
  <p>Note that <code>num_pats</code> refers to the number rows, <code>a_length</code> to the number of columns.  <code>b_length</code> is the number of different input types (the last number of each row).  There are 44 rows in my sample file.</p>