Ecrivez un programme qui génère une erreur StackOverflow ou l’équivalent dans la langue utilisée. Par exemple, en Java , le programme devrait lancer java.lang.StackOverflowError
.
Vous n'êtes pas autorisé à définir une fonction qui s'appelle elle-même ou une nouvelle classe (sauf celle contenant main
java). Il devrait utiliser les classes du langage de programmation sélectionné.
Et il ne faut pas jeter l'erreur explicitement.
def s{def t=s;t}
?Réponses:
Befunge, 1
Je ne sais pas Befunge, mais ...
de Stack Overflow Code Golf
la source
@
fin du programme.Python (2.7.3), 35 caractères
Cette opération elle-même réussit, mais le script et l’interactif jetteront immédiatement la
RuntimeError: 'maximum recursion depth exceeded'
suite.Inspiré par la réponse d'elssar.
la source
Coq
70000
est juste du sucre syntaxique pourS (S ( ... (S O) ...))
avec 70000S
. Je pense que c'est le vérificateur de type qui cause le débordement de pile.Voici un avertissement imprimé avant l'exécution de la commande:
la source
Java - 35
la source
public static void main
de là dedans. Ou est-ce que je ne parviens pas à comprendre Java?Javascript 24 caractères
Réponse dépendante du navigateur (doit avoir accès à
apply
):eval
est-ce que le nom de fonction global le plus court que j'ai pu trouver (quelqu'un connaît-il un nom plus court?)apply
nous permet de convertir un tableau en paramètres de fonction, le premier paramètre étant le contexte de la fonction (this
)Array(999999)
créera un tableau avec la longueur indiquée. Vous ne savez pas quel est le nombre maximum d'arguments, mais il est inférieur à cela et supérieur à99999
IE9:
Chrome 24:
FireFox 18
Remarque - En raison de la nature mono-threadée de javascript, des boucles infinies finissent par verrouiller l'interface utilisateur et ne jamais lancer d'exception.
Ni l'un ni l'autre ne sont admissibles.
Mise à jour - cela rase trois personnages:
la source
eval
c'est le plus court.eval.apply(0,Array(1e6))
enregistre 3 caractères, vous pouvez même y aller9e9
sans fraisapply
est une fonctionnalité standard d'ECMAScript. Il n'y a rien qui dépend du navigateur. Sauf si vous parlez de très vieux navigateurs, mais cela ne fonctionnerait pas dans l'hypothèse de Netscape 2 deapply
toute façon, car laArray
classe n'existe pas dans Netscape 2.eval(...Array(9e9))
dir.apply(0,Array(1e7));
Python 2.7 (12 caractères)
résulte en un «s_push: débordement de pile de l'analyseur»
la source
SyntaxError: unexpected EOF while parsing
exec('{'*101)
je reçoisMemoryError
exec
c’est une déclaration que vous pouvez donc utiliserexec'{'*999
(99 ne semble pas suffire)Mathematica, 4 caractères
la source
Clojure, 12 caractères
En cours d'exécution dans le repl:
la source
(\x.xx)(\x.xx)
, mais je ne connais pas assez la méthode du clojure pour savoir avec certitude si c'est ce qui se passe. Je ne vois pas non plus pourquoi l'expression ci-dessus entraînerait un débordement de pile, alors peut-être que vous faites une supercherie avec le combinateur en Y? Cette réponse m'intéresse et une explication serait bien.Java - 113 caractères
Je pense que cela reste dans l'esprit de la règle "pas de méthode d'auto-appel". Il ne le fait pas explicitement et passe même par une construction de langage Java.
Version condensée:
la source
""+this
fait""+this.toString()
, la méthode s’appelle elle-même.StringBuilder
objet là-bas.toString
sera probablement appelé de l'intérieur.toString()
méthode finit par êtrepublic java.lang.String toString() { return this.toString(); }
C, 19 octets
la source
main.c:1:16: error: size of array 'i' is negative
pour moi sur gcc 4.8.1. La version non signéemain(){int i[~0U];}
fonctionne.sizeof(i)
est de 16 Go. L'utilisation d'un suffixeul
ou d' unull
suffixe fait-elle une différence? Certains systèmes surchargent la mémoire et ne se bloquent que si la mémoire est écrite.GolfScript (8 caractères)
Résultat:
Fondamentalement, cela crée une structure de données fortement imbriquée, puis déborde de la pile lorsque vous essayez de la transformer en chaîne.
la source
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
333
et qui cèdera.333
C’était la plus petite valeur qui m’ait cassé pour moi, mais si vous avez une version différente de Ruby (ou peut-être la même version sous un système d’exploitation différent, pour autant que je sache), elle pourrait gérer un nombre différent de cadres de pile avant de déborder.6.?
toujours sans ajouter de caractères.Assemblage x86, syntaxe NASM, 7 octets
"Pëý" est 50 EB FD en hexadécimal, et
en assemblage x86.
la source
Rubis, 12
Donne
Probablement dépendant du système, mais vous pouvez ajouter des ordres de grandeur en rapprochant le dernier chiffre (non recommandé).
Modifier pour l'explication: comme dans d'autres exemples, cela crée une chaîne de
[][][]
... répétée 9000 fois, puis l'évalue: la plus à droite[]
est analysée comme un appel de fonction au reste, etc. Si elle commence réellement au début, elle générera une ArgumentError car il[]
s'agit d'un objet avec une[]
méthode qui nécessite un argument, mais ma machine génère une erreur un peu avant que la pile dépasse 9 000.la source
ruby
1.9.2 génère «ArgumentError: nombre d'arguments incorrect (0 pour 1..2)».ruby
1.8.7. Là, le code posté fonctionne comme décrit.def f;f;end;f
Rebol (11 Chars)
Rendements:
Bien que Rebol ait des fonctions, des fermetures et des objets… cela ne définit aucun de ceux-ci. Il définit une structure de données qui, dans le paradigme code en tant que données, peut être traitée comme un code utilisant DO.
Nous pouvons approfondir la question de "qu'est-ce que S" avec le REPL:
NE transforme jamais cela en une fonction, il appelle l'évaluateur dans l'environnement actuel de la structure.
la source
C, 35 caractères
la source
alloca(1)
traduction est essentiellement traduite desub $1, %esp
manière à ne pas toucher à la pile.Common Lisp, 7 caractères
la source
#1=(#1#)
pour le terminal et(print #1=(#1#))
, mais votre solution est tellement meilleure.Python - 11 caractères
la source
Calculatrice Casio, 11 touches
Il est assez difficile de compter les octets / jetons dans cette "langue" - j'ai donné le nombre de touches requis, à l'exclusion de Shift, Alpha (la touche de la deuxième touche) et
=
à la fin - cela correspond certainement à 1 octet par touche.Testé sur le modèle fx-85GT PLUS , qui est une calculatrice scientifique standard, non graphique, "non programmable". D'autres modèles fonctionneront.
Il suffit d'empiler 11 racines de cube:
3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√
Il ne donne même pas d'erreur de syntaxe sur le nombre manquant sous la racine carrée.
Cela ne semble pas fonctionner avec des racines carrées.
Sinon, répétez cos(31 fois.
Sortie
Je crois que cela peut être qualifié de débordement de pile. La pile semble être minuscule ...
la source
(((((((((((((((((((((((((
FORTH, 13 octets
déborde de la pile de valeurs
la source
: X X ; X
(9) doit déborder de la pile de retour:
...;
définition de mot. Cela ajoute au moins 6 caractères, plus au moins 2 autres pour l’exécuter en tant que programme. Vous pourriez être en mesure de le faire plus court, mais voici un exemple:: F BEGIN 1 AGAIN ; F
. Je suggère cela parce que la question demande: "Écris un programme." Quoi qu'il en soit, vous avez donné un vote positif pour Forth, quel que soit le nombre de personnages! :-)Postscript, 7
Par exemple.
la source
Haskell (GHC, pas d'optimisation), 25
la somme est paresseuse dans le total. Cela empile un tas de thunks, puis tente de les évaluer tous à la fin, ce qui entraîne un débordement de pile.
la source
LaTeX: 8 caractères
C'est le même code utilisé dans cette réponse . Pour l' essentiel, la
\end
macro se développe à plusieurs reprises, ce qui entraîne un débordement de pile:TeX capacity exceeded, sorry [input stack size=5000]
. Une explication plus détaillée peut être trouvée ici .la source
PHP 5.4, 33 caractères
Cela provoque un débordement de pile lorsque les objets imbriqués stdClass sont automatiquement détruits:
la source
Q / k (16 caractères)
Pas sûr que ce soit dans l'esprit du défi mais je ne pense pas que cela enfreigne les règles:
la source
Un groupe dans le même style:
Python, 30
Javascript, 38
Lua, 44
la source
x=lambda y:y(y);x(x)
est plus court (20 caractères). Cette fonction n'est pas récursive. x appelle toute fonction qui lui est transmise en tant qu'argument.->x{x[x]}[->y{y[y]}]
#@#&[#@#&]
C #:
106865846322832 : Les Getters peuvent SO votre machine facilement en C #:
la source
public int a {get{return a;}}
int a { get { return a; } }
INTERCAL, 12 octets
Explication:
NEXT
est la version d’un appel de sous-programme par INTERCAL (ou du moins, la plus proche que vous puissiez obtenir). Il pousse la position actuelle sur laNEXT
pile et saute à l'étiquette donnée.Cependant, si la
NEXT
longueur de la pile dépasse 80, vous obtenez ce qui est à peu près la version INTERCAL d'un débordement de pile:Essayez-le sur Ideone. .
la source
Croissant Mornington,
139133la source
Assemblage X86 (AT & T), 33 caractères
Notez que bien que j'utilise l'étiquette
main
comme cible de saut, il ne s'agit pas d' une fonction récursive.la source
dd 0fdeb60
10 caractères!Python (17):
la source
KeyError: 'unknown symbol table entry'