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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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];" !!