Bonjour,
Selon le schéma suivant :
et le code suivant :
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
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; }
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
Partager