Je cherche désespérement la réponse à une question que je me pose : pour parler de la mémoire vive on parle du "segment-mémoire", mais est-ce vraiment un segment ou un cercle ?
Je m'explique : est-il possible que si j'alloue 10 octets avec la fonction malloc, le bloc mémoire retourné aille par exemple de l'octets n°(SIZE_MAX-4) à l'octet n°5?
Par exemple imaginons que je compile ce programme :
Je me demande s'il est possible que ce programme buggue, si par exemple l'appel de malloc(4) retourne un bloc de mémoire dont l'adresse est SIZE_MAX. Auquel cas, le 2ème appel de my_str_len retourne -1 au lieu de 2, car str+1 vaut NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 int my_str_len(char *str) { //si str est nulle, renvoie -1 //si str est non-nulle, renvoie la taille de str } int main() { char *str = malloc(4); str[0] = 'a'; str[1] = 'b'; str[2] = 'c'; str[3] = '\0'; printf("%d\n",my_str_len(str)); //affiche 3 : normal printf("%d\n",my_str_len(str+1)); //affiche 2 : normal }
Voilà, j'espère que je me suis fait comprendre, et que quelqu'un saura me répondre.
Partager