repositories
/
TD_C.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
TP_13 exo1: Fix a memleak on the prompt error handling case
[TD_C.git]
/
TP_13
/
exo1
/
lib
/
io.c
diff --git
a/TP_13/exo1/lib/io.c
b/TP_13/exo1/lib/io.c
index 69b13d768f2b68e4cd0a01e01f2e23ab30a8368a..b6cc52c21780b5e8b614431566786e294a256543 100644
(file)
--- a/
TP_13/exo1/lib/io.c
+++ b/
TP_13/exo1/lib/io.c
@@
-15,10
+15,10
@@
int* prompt_array(int array[], unsigned* size) {
int errno = prompt_value("Taille du tableau?", (int*)size);
array = create_tab(array, *size);
for (unsigned i = 0; i < *size; i++) {
int errno = prompt_value("Taille du tableau?", (int*)size);
array = create_tab(array, *size);
for (unsigned i = 0; i < *size; i++) {
- errno += prompt_value("Valeur?", &array[i]);
+ errno += prompt_value("Valeur?", &array[i]);
+ /* error might have occured */
+ handle_prompt_error(errno, array);
}
}
- /* error might have occured */
- handle_prompt_error(errno);
return 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);
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");
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);
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));
}
printf("La valeur %d est presente %d fois dans le tableau\n", search_value, count_tab_element(array, size, search_value));
}
@@
-101,17
+101,23
@@
void do_resize(int array[], unsigned* old_size) {
unsigned new_size = 0;
errno = prompt_value("\nNouvelle taille?", (int*)&new_size);
unsigned new_size = 0;
errno = prompt_value("\nNouvelle taille?", (int*)&new_size);
- handle_prompt_error(errno);
- /* FIXME: one should able the set the array new content if new_size > *old_size
- * for now, new values are zeroed */
+ handle_prompt_error(errno, array);
array = resize_tab(array, *old_size, new_size);
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, array);
+ }
+ }
*old_size = new_size;
}
*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 */
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);
}
}
exit(EXIT_FAILURE);
}
}