TP_13 exo1: Fix a memleak on the prompt error handling case
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Mar 2017 11:40:59 +0000 (13:40 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Mar 2017 11:40:59 +0000 (13:40 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP_13/exo1/lib/io.c
TP_13/exo1/lib/io.h
TP_13/exo1/src/main.c

index b0a66a0fb1b14f4cc821a475c0a8558e9c90a44d..b6cc52c21780b5e8b614431566786e294a256543 100644 (file)
@@ -17,7 +17,7 @@ int* prompt_array(int array[], unsigned* size) {
     for (unsigned i = 0; i < *size; i++) {
         errno += prompt_value("Valeur?", &array[i]);
         /* error might have occured */
-        handle_prompt_error(errno);
+        handle_prompt_error(errno, array);
     }
     return array;
 }
@@ -59,7 +59,7 @@ void do_sort(int array[], unsigned size) {
     printf("4) Croissant impairs en premier.\n");
     do {
         errno = prompt_value("Choix?", &choice);
-        handle_prompt_error(errno);
+        handle_prompt_error(errno, array);
         done = true;
         if (1 > choice || 4 < choice) {
             printf("\nFaire un choix compris entre 1 et 4\n");
@@ -92,7 +92,7 @@ void do_count(int array[], unsigned size) {
     int search_value = 0;
 
     errno = prompt_value("\nValeur a chercher?", &search_value);
-    handle_prompt_error(errno);
+    handle_prompt_error(errno, array);
     printf("La valeur %d est presente %d fois dans le tableau\n", search_value, count_tab_element(array, size, search_value));
 }
 
@@ -101,22 +101,23 @@ void do_resize(int array[], unsigned* old_size) {
     unsigned new_size = 0;
 
     errno = prompt_value("\nNouvelle taille?", (int*)&new_size);
-    handle_prompt_error(errno);
+    handle_prompt_error(errno, array);
     array = resize_tab(array, *old_size, new_size);
     if (new_size > *old_size) {
         printf("Saisie des valeurs supplementaires du tableau\n");
         for (unsigned i = *old_size; i < new_size; i++) {
             errno += prompt_value("Valeur?", &array[i]);
-            handle_prompt_error(errno);
+            handle_prompt_error(errno, array);
         }
     }
     *old_size = new_size;
 }
 
-void handle_prompt_error(int errno) {
+void handle_prompt_error(int errno, int* tab) {
     if (errno != 0) {
         printf("\nMerci de saisir un nombre entier, exiting\n");
         /* it's somewhat violent but better than looping forever */
+        free_tab(tab);
         exit(EXIT_FAILURE);
     }
 }
index 6dfc77aa392459b2016b0cf7ab87bc5af6c5dadc..fd5c4842c37ba09c70e89be336294418732633ba 100644 (file)
@@ -3,7 +3,7 @@
 
 int prompt_value(const char* msg, int* result);
 int* prompt_array(int array[], unsigned* size);
-void handle_prompt_error(int errno);
+void handle_prompt_error(int errno, int* tab);
 
 void display_choice_menu();
 
index ef4d5455c32177aba07a6eff8f7af458d9931fd1..a68e73cb2cbf5a1b87031357c576e11eb9521993 100644 (file)
@@ -17,7 +17,7 @@ int main() {
     do {
         display_choice_menu();
         errno = prompt_value("Choix?", &choice);
-        handle_prompt_error(errno);
+        handle_prompt_error(errno, tab);
         if (1 > choice || 8 < choice) {
             printf("\nFaire un choix compris entre 1 et 8\n");
             continue;