Compiler et analyser le code suivant
Lancé votre program avec un chiffre différents. Que ce passe t'il quand vous lancé votre program, par exemple ``./main 0'' puis ``./main 1'' ou encore ``./main 2''.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int a = 5000;
int b = 23;
int c[1] = {1};
int d[1] = {2};
printf("Before: a = %d, b = %d, c[0] = %d, d[0] = %d\n", a, b, c[0], d[0]);
int index = atoi(argv[1]);
c[index] = 42;
printf("After: a = %d, b = %d, c[0] = %d, d[0] = %d\n", a, b, c[0], d[0]);
return 0;
}
Questions :
- Quelle sont vos observations sur les données modifiés ?
- Ces données sont t-elle dans la stack ou dans la heap ?
Compiler et analyser le code suivant
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int a = 5000;
int b = 23;
int c[1] = {1};
int d[1] = {2};
printf("Before: a = %d, b = %d, c[0] = %d, d[0] = %d\n", a, b, c[0], d[0]);
*((&b) + 1) = 80; // Quelle variable est impacté ?
*((&b) - 1) = 42; // Quelle variable est impacté ?
printf("After: a = %d, b = %d, c[0] = %d, d[0] = %d\n", a, b, c[0], d[0]);
return 0;
}
Questions :
- Que fait le code suivant : &b
- Que fait le code suivant : (&b)+1
- Que fait le code suivant : *((&b)+1)
- En déduire ce qui ce passe en mémoire, fait une représentation de la stack