From 8f2b28438cb012169904a7fa1643977da5e40409 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Wed, 1 Mar 2017 20:28:12 +0100 Subject: [PATCH] TP 9 exo2: handle out of bound list operations properly. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- TP_9/exo2/clist.c | 38 ++++++++++++++++++++------------------ TP_9/exo2/exo2.c | 4 ++-- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/TP_9/exo2/clist.c b/TP_9/exo2/clist.c index 0aa9e37..2e0352d 100644 --- a/TP_9/exo2/clist.c +++ b/TP_9/exo2/clist.c @@ -3,11 +3,11 @@ #include "clist.h" link_t* list_new(int value) { - link_t* link_t_new; - link_t_new = malloc(sizeof(link_t)); - link_t_new->value = value; - link_t_new->next = NULL; - return link_t_new; + link_t* link_new; + link_new = malloc(sizeof(link_t)); + link_new->value = value; + link_new->next = NULL; + return link_new; } link_t* list_append(link_t* head, int value) { @@ -75,9 +75,7 @@ link_t* list_delete(link_t* head, unsigned index) { unsigned list_count(link_t* head) { int count = 0; - if (head == NULL) { return count; } - count = 1; - while (head->next != NULL) { + while (head != NULL) { ++count; head = head->next; } @@ -85,30 +83,34 @@ unsigned list_count(link_t* head) { } void list_set(link_t* head, unsigned index, int value) { + unsigned count = 0; - //FIXME: check for the index value validity - for (unsigned count = 0; count < index; count++) { + while (head != NULL && count < index) { + ++count; head = head->next; } - head->value = value; + if (head != NULL) { head->value = value; } } int list_get(link_t* head, unsigned index) { - - if (index < list_count(head)) { - for (unsigned i = 0; i < index; i++) { - head = head->next; - } + unsigned count = 0; + + while (head != NULL && count < index) { + ++count; + head = head->next; + } + if (head != NULL) { return head->value; - } else { + } else { return -1; } } void list_clear(link_t* link) { + link_t* next_link = NULL; while (link != NULL) { - link_t* next_link = link->next; + next_link = link->next; free(link); link = next_link; } diff --git a/TP_9/exo2/exo2.c b/TP_9/exo2/exo2.c index ff5912b..b7dae12 100644 --- a/TP_9/exo2/exo2.c +++ b/TP_9/exo2/exo2.c @@ -22,11 +22,11 @@ int main() { printf("Valeur a index %d: %d\n", 0, list_get(head, 0)); printf("Valeur a index %d: %d\n", 1, list_get(head, 1)); printf("Valeur a index %d: %d\n", 2, list_get(head, 2)); - head = list_insert(head, 2, 7); + //head = list_insert(head, 2, 7); printf("Valeur a index %d: %d\n", 1, list_get(head, 1)); printf("Valeur a index %d: %d\n", 2, list_get(head, 2)); printf("Valeur a index %d: %d\n", 3, list_get(head, 3)); - //head = list_delete(head, 2); + head = list_delete(head, 2); printf("Valeur a index %d: %d\n", 2, list_get(head, 2)); printf("Valeur a index %d: %d\n", 3, list_get(head, 3)); printf("Valeur a index %d: %d\n", 4, list_get(head, 4)); -- 2.34.1