Gestion de la mémoire avec "realloc"
Bonjour à tous,
Je cherche à comprendre comment fonctionne realloc lorsqu'on a fait un malloc avant.
Est-ce que si on déclare quelques entiers avant le realloc, l'adresse de l'espace mémoire allouée après avec realloc sera avancé des X entiers déclaré avant !?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <stdio.h>
#include <stdlib.h>
void main(void)
{
int a = 9;
int nombre = 5;
int * valeurs;
valeurs = (int *) malloc(sizeof(int) * nombre);
double test = 9.9;
if ( valeurs == NULL )
{
fprintf(stderr,"Allocation impossible \n");
exit(EXIT_FAILURE);
}
else
{
*valeurs = 1;
printf("%d\n",*valeurs);
int k[2000];
valeurs = realloc (valeurs, sizeof(int) * (nombre + 1) );
printf("%d\n",valeurs[4]);
printf("%d\n",valeurs[5]);
//adresses
valeurs++;
printf("%p\n",valeurs);
valeurs++;
printf("%p\n",valeurs);
valeurs++;
printf("%p\n",valeurs);
valeurs++;
printf("%p\n",valeurs);
valeurs++;
printf("%p\n",valeurs);
valeurs++;
printf("%p\n",valeurs);
valeurs = valeurs - 6;
free(valeurs);
valeurs=NULL;
}
} |
J'obtiens cette réponse :
Code:
1 2 3 4 5 6 7 8 9
| 1
0
0
0xf30014
0xf30018
0xf3001c
0xf30020
0xf30024
0xf30028 //adresse réalloué du tableau alloué dynamiquement avec malloc |
La dernière adresse devrait être de 0xf30024 + X entiers "int k[2000];" !!