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>staticsize_tn;staticintchienGeant(char*c){charbuf[1024];strncpy(buf,c,1024);printf("%zu:%s\n",++n,buf);returnchienGeant(&buf[0]);}intmain(){printf("coucou\n");structrlimitl={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.");return0;}
Avec
warning: all paths through this function will call itself [-Winfinite-recursion]
[^] # Re: Hope this helps
Posté par David Marec . En réponse au message question sur la structure du code que fait le compilateur (.text, .bss, .heap ...). Évalué à 2.
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é:
Avec