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 : 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
}
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.