Le bloc renvoyé par la fonction malloc
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 :
Code:
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
} |
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.
Voilà, j'espère que je me suis fait comprendre, et que quelqu'un saura me répondre.