Bonjour,

Selon le schéma suivant :



et le code suivant :

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
 
#include <stdio.h>
#include <stdlib.h>
 
#define MAX 500
int varglobni;
int varglobi;
 
int main (){
	static int staticni=5;
	static int statici;
	int i;
	int nbres;
	printf("Combien y a t'il de résultat a encoder ? ");
	scanf("%d",& nbres);
	int *memoireAlloue = malloc(nbres*sizeof(int));
	if (memoireAlloue == NULL)
		exit(1);
	for (i=0;i<nbres;i++){
		printf("Bonjour ! Veuillez encodez le résultat numéro %d : ",i+1);
		scanf("%d",memoireAlloue + i);
	}
	for (i=0; i<nbres; i++)
		printf("Le nombre %d que vous avez encode est : %d\n",i+1,*(memoireAlloue+i));
	//printf("L'adresse d'un define est : %p",& MAX);
	printf("L'adresse d'une variable globale initialisé est : %p\n", &varglobi);
	printf("L'adresse d'une variable globale non-initialisé est : %p\n", &varglobni);
	printf("L'asresse d'une variable STATIC non-initialisé est : %p\n", &staticni);
	printf("L'asresse d'une variable STATIC initialisé est : %p\n", &statici);
	printf("La pile\n");
	printf("L'adresse du pointeur est : %p\n", &memoireAlloue);
	printf("L'adresse du compteur est : %p\n", &i);
	printf("L'adresse de nbres est :    %p\n", &nbres);
	printf("Le tas\n");
	for (i=0; i<nbres;i++)
		printf("L'adresse du nombre %d que vous avez encode est : %p\n",i+1,memoireAlloue+i);
 
	free(memoireAlloue);
	return 0;
 
}
Et pour ceux qui ont la flemme de le compiler le résultat :

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
 
Combien y a t'il de résultat a encoder ? 5
Bonjour ! Veuillez encodez le résultat numéro 1 : 
5
Bonjour ! Veuillez encodez le résultat numéro 2 : 52
Bonjour ! Veuillez encodez le résultat numéro 3 : 1
Bonjour ! Veuillez encodez le résultat numéro 4 : 0
Bonjour ! Veuillez encodez le résultat numéro 5 : 15
Le nombre 1 que vous avez encode est : 5
Le nombre 2 que vous avez encode est : 52
Le nombre 3 que vous avez encode est : 1
Le nombre 4 que vous avez encode est : 0
Le nombre 5 que vous avez encode est : 15
L'adresse d'une variable globale initialisé est : 0x601068
L'adresse d'une variable globale non-initialisé est : 0x601064
L'asresse d'une variable STATIC non-initialisé est : 0x601048
L'asresse d'une variable STATIC initialisé est : 0x601060
La pile
L'adresse du pointeur est : 0x7fffc8c2c1d0
L'adresse du compteur est : 0x7fffc8c2c1dc
L'adresse de nbres est :    0x7fffc8c2c1d8
Le tas
L'adresse du nombre 1 que vous avez encode est : 0x25d2010
L'adresse du nombre 2 que vous avez encode est : 0x25d2014
L'adresse du nombre 3 que vous avez encode est : 0x25d2018
L'adresse du nombre 4 que vous avez encode est : 0x25d201c
L'adresse du nombre 5 que vous avez encode est : 0x25d2020

Désolé que ca soit aussi long mais c'est pour bien comprendre.

Questions :


-Les variables globales et static non-initialisées devraient être stockées dans le segment de mémoire bss ? Pourquoi dans mon code elles sont visiblement stockée sur le tas ou en tout cas au même endroit que celles initialisées?

-Pourquoi est-ce que je ne peux pas voir l'adresse de #define MAX 500 ? (erreur à la compilation)

-Je pensais que dans le segment de donnée il y aurait mes variables, mais elles sont sur la pile, n'est-ce pas ? Dès lors, dans le segment de donnée qu'est-ce qu'il y a ?

Beaucoup de blabla pour peu de questions mais bon, merci à celui ou ceux qui prendront le temps de me lire et de me répondre

bye bye