correct a memory leak
[calc.git] / parser.c
index ed39dd78e72e2ca55fcd642b56a9e4cfae943307..0359234f352fb4669805cd3162d7aa957784d0c4 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -675,12 +675,15 @@ double while_do (element_t *cond, element_t *action)
         VERBOSE (DEBUG, fprintf (stdout, "loop...\n"));
 
         temp = dupelement (cond);
-        if (!evaluate_element (temp, 0)) {
+        double test = evaluate_element (temp, 0);
+        delelement (temp);
+        if (!test) {
             break;
         }
         if (action) {
             temp = dupelement (action);
             ret = evaluate_element (temp, 0);
+            delelement (temp);
         }
     }
 
@@ -840,6 +843,7 @@ double call (int id, int nbops, element_t **ops)
     /* evaluate program */
     element_t *elements = dupelement ((programs + n)->root);
     ret = evaluate_element (elements, 0);
+    delelement (elements);
 
     /* restore context */
     answer = tmp.answer;
@@ -1210,7 +1214,7 @@ void free_completion_list (char **list)
     int i;
 
     if (list) {
-        for (i = 0; i < NB_FUNCTIONS + NB_CONSTANTS; i++) {
+        for (i = 0; i < NB_OPERATORS + NB_FUNCTIONS + NB_CONSTANTS + NB_SYMBOLS + 1; i++) {
             if (list[i] != NULL) {
                 free (list[i]);
             }