Bonjour,
A la slide 24 du cours "pointeurs(2/5)", il est expliqué que la condition:
if ((result.allocated > SIZE_MAX / sizeof(type_el)) || ... )
est là pour éviter toute erreur de overflow pouvant avoir lieu lors de l'appel à "realloc( ... )" à la ligne suivante.
Est ce que dans le cas ou notre type "type_el" s'cérit en mémoire sur uniquement 1 byte (par exemple avec un "char") un overflow pourrait se produire à la ligne précédante :
result.allocated += VECTOR_PADDING;
sans que celui ci ne soit détecté ?
Admetons pour l'exemple que result.allocated = SIZE_MAX, dans ce cas, l'addition provoquera un overflow et result.allocated vaudra ensuite VECTOR_PADDDING qui est inférieur à SIZE_MAX.
Il me semble que la condition telle qu'elle est dans le cours ne fonctionne que si sizeof(type_el) > 1.
Est ce qu'il ne faudrait pas également rajouter une condition du type :
result.allocated >= v->allocated
afin de s'assurer que la nouvelle valeur soit bien supérieur à l'ancienne ?
Merci d'avance