fix a memory leak
authorLaurent Mazet <mazet@softndesign.org>
Tue, 14 Feb 2023 23:30:39 +0000 (00:30 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 14 Feb 2023 23:30:39 +0000 (00:30 +0100)
tabular.c

index 83c17898248b07dd3495be769bbcdc7b35eddd2c..8100f048037643dfe531e770514dd2e699e8eaac 100644 (file)
--- a/tabular.c
+++ b/tabular.c
@@ -33,7 +33,9 @@ tab_t *resize_tab (tab_t *tab, int nb)
         tmp = (double *) callocordie (nb, sizeof (double));
         memcpy (tmp, tab->data, ((tab->size < nb) ? tab->size : nb) * sizeof (double));
     }
-    free (tab->data);
+    if (tab->data){
+        free (tab->data);
+    }
     tab->data = tmp;
     tab->size = nb;
     return tab;
@@ -134,11 +136,13 @@ double pop_tab (tab_t *tab, int id)
     if ((!tab) || (((id < 1) || (id > tab->size)) && (id != -1))) {
         VERBOSE (WARNING, fprintf (stdout, "error out of bounds (%d/%d)\n", id, (tab) ? tab->size : 0));
     } else {
-        ret = tab->data[id - 1];
 
         /* special case for inserting an element at the end */
         id = (id == -1) ? tab->size : id;
 
+        /* read data */
+        ret = tab->data[id - 1];
+
         /* create larger tab */
         double *tmp = (double *) callocordie (tab->size - 1, sizeof (double));
         memcpy (tmp, tab->data, (id - 1) * sizeof (double));