repositories
/
TD_C.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
TP 9 exo2: handle out of bound list operations properly.
[TD_C.git]
/
TP_9
/
exo2
/
clist.c
diff --git
a/TP_9/exo2/clist.c
b/TP_9/exo2/clist.c
index 0aa9e37da73e1271d043a5a82796f75742999754..2e0352de109dfede2612bc175e0a6e9ab85c4c63 100644
(file)
--- 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) {
#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) {
}
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;
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;
}
++count;
head = head->next;
}
@@
-85,30
+83,34
@@
unsigned list_count(link_t* head) {
}
void list_set(link_t* head, unsigned index, int value) {
}
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 = head->next;
}
- head->value = value;
+ if (head != NULL) { head->value = value; }
}
int list_get(link_t* head, unsigned index) {
}
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;
return head->value;
- } else {
+ } else {
return -1;
}
}
void list_clear(link_t* link) {
return -1;
}
}
void list_clear(link_t* link) {
+ link_t* next_link = NULL;
while (link != NULL) {
while (link != NULL) {
-
link_t*
next_link = link->next;
+ next_link = link->next;
free(link);
link = next_link;
}
free(link);
link = next_link;
}