• [^] # Re: Hope this helps

    Posté par . En réponse au message question sur la structure du code que fait le compilateur (.text, .bss, .heap ...). Évalué à 2.

    Il te suffira d'appeler ton programme avec, en premier argument, une chaine composée d'un peu plus de 50 caractères (dépend des options de compil', de l'archi, etc...) pour avoir un beau stack overflow.

    C'est plus une corruption de pile due à un débordement de tampon (buffer overflow) qu'un débordement de pile (stack overflow), en fait.

    Un exemple plus classique, en abusant de la récursivité:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <sys/resource.h>
    static size_t n;
    static int chienGeant(char*c)
    {
     char buf[1024];
     strncpy(buf,c,1024);
     printf("%zu:%s\n",++n,buf);
     return chienGeant(&buf[0]);
    }
    int main()
    {
     printf("coucou\n");
     struct rlimit l={8192,8192};
     if (setrlimit( RLIMIT_STACK,&l))
     {
     perror("unable to set limit");
     }
     chienGeant("un chient geant, c'est comme un chien mais en plus grand.");
     return 0;
    }

    Avec

    warning: all paths through this function will call itself [-Winfinite-recursion]