Fixed some more memory problems revealed by valgrind.
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 31 Jan 2005 01:54:57 +0000 (01:54 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 31 Jan 2005 01:54:57 +0000 (01:54 +0000)
src/ChangeLog
src/examine.q
src/factor_stats.c
src/oneway.q
src/output.c
src/pfm-read.c

index d94cc0d98b9503b14c54ab1405802849d4557ee3..2b50e318bf44c40dd24256cc3327050cdd6fa9dc 100644 (file)
@@ -1,3 +1,10 @@
+
+Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
+
+       * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
+       problems revealed by valgrind.
+
+
 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
 
        * set.q: Affixed a fix to the previous fix such that we'll be OK now
index 4e28f23917501542defa0803efbc9cc4667b9610..3454b66f927a82696d64bbed727625512a593abc 100644 (file)
@@ -372,6 +372,8 @@ output_examine(void)
 }
 
 
+/* Create a hash table of percentiles and their values from the list of
+   percentiles */
 static struct hsh_table *
 list_to_ptile_hash(const subc_list_double *l)
 {
@@ -391,6 +393,7 @@ list_to_ptile_hash(const subc_list_double *l)
       struct percentile *p = xmalloc (sizeof (struct percentile));
       
       p->p = subc_list_double_at(l,i);
+      p->v = SYSMIS;
 
       hsh_insert(h, p);
 
@@ -1527,12 +1530,14 @@ populate_descriptives(struct tab_table *tbl, int col, int row,
     
     assert(p);
 
+
     tab_float (tbl, col + 2, 
               row + 4,
               TAB_CENTER,
               p->v,
               8, 2);
   }
+    
 
   tab_text (tbl, col, 
            row + 5,
index 8109a2171f0774f25a3087ab156e0f40af475d03..79c9b80ca8b2a4c2e9c46b5016377f348805f95c 100644 (file)
@@ -44,6 +44,7 @@ metrics_precalc(struct metrics *m)
   m->min = DBL_MAX;
   m->max = -DBL_MAX;
 
+  m->histogram = 0;
 
   m->moments = moments1_create(MOMENT_KURTOSIS);
 
@@ -141,6 +142,13 @@ metrics_postcalc(struct metrics *m)
   m->wvp = (struct weighted_value **) hsh_sort(m->ordered_data);
   m->n_data = hsh_count(m->ordered_data);
 
+  /* Trimmed mean calculation */
+  if ( m->n_data <= 1 ) 
+    {
+      m->trimmed_mean = m->mean;
+      return;
+    }
+
   m->histogram = histogram_create(10, m->min, m->max);
 
   for ( i = 0 ; i < m->n_data ; ++i ) 
@@ -149,13 +157,6 @@ metrics_postcalc(struct metrics *m)
       gsl_histogram_accumulate(m->histogram, wv[i]->v.f, wv[i]->w);
     }
 
-  /* Trimmed mean calculation */
-  if ( m->n_data <= 1 ) 
-    {
-      m->trimmed_mean = m->mean;
-      return;
-    }
-
   tc = m->n * 0.05 ;
   k1 = -1;
   k2 = -1;
@@ -272,7 +273,8 @@ metrics_destroy(struct metrics *m)
 {
   hsh_destroy(m->ordered_data);
   hsh_destroy(m->ptile_hash);
-  gsl_histogram_free(m->histogram);
+  if ( m-> histogram ) 
+    gsl_histogram_free(m->histogram);
 }
 
 void
index 1d2082043b33d3c61eecb2cfaa4c7efb4a06cf62..7277b79a2fe4aa2e8773e0e2a4de8ec453c83e84 100644 (file)
@@ -140,7 +140,8 @@ cmd_oneway(void)
 
   multipass_procedure_with_splits (run_oneway, &cmd);
 
-  free_oneway(&cmd);
+  free (vars);
+  free_oneway (&cmd);
 
   return CMD_SUCCESS;
 }
index f517ada0286959e03526f855fda6a4044bbc2347..f318cb86d72bca8f948dab87728c90fc63cf4b0b 100644 (file)
@@ -455,6 +455,8 @@ outp_done (void)
       free(n);
       n = next;
     }
+  free (outp_title);
+  free (outp_subtitle);
 
   return 1;
 }
index 5b64d25d275115954a7b5e9d4bee9bfc6d92417c..abc14edb0198a5c0f5ff432a8f8eae3f59ffa0c7 100644 (file)
@@ -101,6 +101,8 @@ corrupt_msg (struct pfm_reader *r, const char *format, ...)
   return 0;
 }
 
+static unsigned char * read_string (struct pfm_reader *r);
+
 /* Closes a portable file after we're done with it. */
 void
 pfm_close_reader (struct pfm_reader *r)
@@ -108,6 +110,8 @@ pfm_close_reader (struct pfm_reader *r)
   if (r == NULL)
     return;
 
+  read_string (NULL);
+
   if (r->fh != NULL)
     fh_close (r->fh, "portable file", "rs");
   if (fclose (r->file) == EOF)