Ce qui est une exception dans StackOverFlow vb.net?
Je ne sais même pas ce qu'il fait dans mon application. Quel est-il? J'ai créé une nouvelle instance d'une classe (la classe est dans un autre fichier), mais la première fois que j'appelle une méthode de il jette à un StackOverFlow exception.
La seule chose que je pense que logiquement jeter un stackoverflow exception serait si quelqu'un downvoted Jon Skeet.
Mais sérieusement, c'est quoi? J'ai eu autour de lui par la création d'une autre classe dans le même fichier que le premier de la classe et de l'aide que pour appeler les méthodes pour moi.
Peut-être un dump de votre erreur et de certaines sources, serait de nous aider à répondre à cette énigme pour vous.
En bas à droit de vote de Jon fait provoque un BSOD. 🙂
On va pas revenir en arrière et re-casser mon code, car il n'est pas sous contrôle de code source et je n'ai pas envie de casser quelque chose qui fonctionne. Im la moitié inquiet Jon va le voir, cette question maintenant lol.
Et vous devriez être.... Si Jon voit cela et d'obtenir surprise de vous aurez une autre inexpliquée de débordement de pile.
Et, bien sûr, que stackoverflow va provoquer le BSOD (écran Noir de la mort), ce qui physiquement débrancher les fils connectés à mon moniteur. Pour aggraver les choses, c'est un ordinateur portable >.<
En bas à droit de vote de Jon fait provoque un BSOD. 🙂
On va pas revenir en arrière et re-casser mon code, car il n'est pas sous contrôle de code source et je n'ai pas envie de casser quelque chose qui fonctionne. Im la moitié inquiet Jon va le voir, cette question maintenant lol.
Et vous devriez être.... Si Jon voit cela et d'obtenir surprise de vous aurez une autre inexpliquée de débordement de pile.
Et, bien sûr, que stackoverflow va provoquer le BSOD (écran Noir de la mort), ce qui physiquement débrancher les fils connectés à mon moniteur. Pour aggraver les choses, c'est un ordinateur portable >.<
OriginalL'auteur Cyclone | 2009-09-20
Vous devez vous connecter pour publier un commentaire.
En règle générale, une exception de dépassement de pile est causée par un algorithme récursif où la profondeur de récursivité a dépassé l' (généralement) fixe limite d'empilement. C'est habituellement le résultat d'un bug dans l'algorithme, mais elle peut aussi être causée par la structure de données que vous êtes en appliquant l'algorithme d'être trop "profond".
Voici un exemple trivial d'un buggy de récursivité (en PL).
L'appel de longueur pour la non-vide de la liste donnera un débordement de pile dans un typique langage de programmation. Mais même si vous corrigez le bug, l'appel de la méthode pour une longue liste est susceptible de provoquer un débordement de pile.
(La seule exception est lorsque vous utilisez une langue ... ou plus précisément un compilateur ... qui prend en charge la queue de la récursivité d'optimisation.)
Vous auriez à nous montrer le code pour obtenir une réponse.
Ill ont à la source sur mon site soonish, j'ai été faire les fous avec le MDI et le code en question a été appelée lorsque vous tentez d'ajouter plusieurs fenêtres enfant, la boucle For à l'intérieur de la classe principale de la fenêtre Parent a été fixé à moins de 100 fois à tous les coûts. Ce qui devrait se déplaçant à l'appel de la méthode addchild sous le même fichier?
OriginalL'auteur Stephen C
Un stackoverflow exception est lorsque vous dépassez la répartition de la taille de la pile, cela se produit généralement de façon récursive de l'appel de méthodes et de ne jamais le quitter, il peut aussi être causé par divers obscur de la méthode de chaînage. Le problème est que vous avez probablement quelque chose à la mesure de la suivante dans l'objet.
Les appels de manger et de ne jamais libérer l'espace de pile utilisé parce que les appels ne jamais la fin d'exécution et le point d'entrée doit rester.
P. S. DONC, a été nommé pour l'exception en question (ce qui est fondamental et ne se limite pas à l' .NET), c'est juste un nom intelligent pour un développeur de site de.
OriginalL'auteur Quintin Robinson
StackOverFlows Exceptions sont exactement ce qu'ils ressemblent, les débordements de pile. Habituellement c'est parce que vous avez une dépendance circulaire dans vos méthodes. Par exemple, la méthode A appelle B et B des appels A. Ou il pourrait être une méthode récursive sans une base de cas.
OriginalL'auteur ssteidl
Sans voir le code, il est impossible de dire pourquoi c'est arrivé, mais un
StackOverflowException
est levée lorsqu'un thread débordements de sa pile d'appel. Cela se produit le plus souvent lorsqu'une méthode appelle récursivement sans saut conditionnel ainsi la création d'une récursion infinie. Depuis chaque récursion crée un nouveau cadre de pile d'une récursion infinie serait théoriquement créer un nombre infini de pile d'images, je suis sûr que vous pouvez maintenant voir pourquoi le terme "stack overflow" est apt.OriginalL'auteur Andrew Hare
La Pile est l'endroit où l'ordinateur stocke une liste des fonctions qui sont actuellement appelée, et les variables et les paramètres utilisés. Donc, si la fonction main appelle la fonction, puis la fonction appels de fonction B, et ils utilisent des variables c, d et e, la pile va contenir l'ensemble de ces informations. Cependant, la pile n'est si grand. Donc, si la fonction B, puis appelle la fonction C, qui appelle la fonction D... etc, de se retrouver avec des centaines de fonctions imbriquées, finalement, la pile de "dépassement" - il n'y a pas assez d'espace pour stocker un autre appel de fonction.
Que d'autres personnes ont noté, cela se produit généralement avec une fonction récursive (où la fonction B appelle la fonction B, puis appelle la fonction B...) - éventuellement, la stack overflow. Vous aurez besoin de trouver où que récursive de la fonction est appelée, et pourquoi il n'est pas sortir de la boucle récursive lorsqu'il est censé.
Bien sûr, le problème ne peut pas être que c'est un buggy algorithme récursif - il peut être simplement que le nombre d'appels de la fonction dépasse la taille de la pile. Donc, si votre algorithme a le potentiel pour appeler une fonction récursive d'une centaine de fois, il se peut que.
OriginalL'auteur Smashery
Ce problème est généralement causé par un appel récursif à une fonction où que l'appel récursif ne jamais se termine. Vous pouvez obtenir de plusieurs façons. Une façon peut être un algorithme récursif sans une base de cas, un autre courant est celui de la création d'objets A et B: c'est l'un de l'autre dans le à leurs constructeurs, etc.
je vous recommande de l'étape à travers le débogueur et le savoir 🙂
OriginalL'auteur San Jacinto
J'ai récemment porté à une vieille application VB6 à VB.NET qui a utilisé un monstrueux fonction récursive pour trier une aussi grande quantité de données. L'algorithme était très bien, mais l'exécution constamment provoqué une erreur de dépassement de pile. Après beaucoup de jouer du violon, j'ai réalisé que VB a été fait pour beaucoup la magie derrière le code: facile type de casting vient avec un prix. De sorte que la fonction récursive, a été en s'appuyant trop sur la liaison tardive au lieu d'utiliser des variables de type, ce qui a entraîné d'ÉNORMES quantité de coulée, d'analyse, etc. les frais généraux (une seule ligne de code pourrait appeler de 2 à 10 fonctions (...) qui, évidemment, fait le débordement de la pile.
TL;DR: l'Utilisation DirectCast() et statique de la liaison (les variables de type) pour empêcher VB contre les inondations de la pile lors de l'exécution dans une fonction récursive.
OriginalL'auteur user3780645
J'ai eu ce problème, j'ai remarqué que j'ai mal tapé lstEncounter. Comme je l'ai appris dans ma classe C++, le problème est l'algorithme récursif de l'appelant lui-même, avec les mêmes paramètres. Mon exemple où j'ai eu l'erreur:
OriginalL'auteur Hunter Wright
J'ai eu un Stackoverflow erreur.
J'ai été en utilisant une routine qui ajoute 1 à un contre puis re appelée la même routine.
Sur tous les 2500 à 3000 boucles j'ai eu le stackoverflow erreur.
J'ai ajouté une Boucle DO...loop qui appelle la routine, j'utilise VB Express:
AVANT:
(comme je l'ai dit avant, après environ 2500-3000 je voudrais obtenir le Stackoverflow erreur)
APRÈS: (Lieu ce à exécuter en premier)
(Après l'ajout de la Boucle Do..mon programme est exécuté 40000 temps sans "Stackoverflow")
OriginalL'auteur jake