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