| maison  | Hardware  | réseaux  | programmation  | Logiciel  | Dépannage  | systèmes |  
programmation  
  • C /C + + Programming

  • Computer Programming Languages

  • Delphi Programming

  • Programmation Java

  • Programmation JavaScript

  • PHP /MySQL Programmation

  • programmation Perl

  • Programmation Python

  • Ruby Programming

  • Visual Basics programmation
  •  
    Connaissances Informatiques >> programmation >> Computer Programming Languages >> Content
    Qu'est-ce débordement de la pile à la ligne 42
    ? Un débordement de pile se produit lorsque la pile, une structure de données critique trouvée dans chaque programme en cours, a dépassé ses limites de mémoire. Cette condition a plusieurs causes , les symptômes d' erreurs de programmation. Si l'erreur apparaît dans un programme de source commerciale ou ouvert , contactez d'assistance technique. Si le problème se produit , tout en testant votre propre code, voici quelques-unes des questions les plus courantes qui peuvent avoir eu lieu à la ligne 42 . Contexte

    La pile d'appel , la cause la plus fréquente des débordements de pile , tient une liste des adresses de retour de chaque appel d'une fonction ou d'une méthode . Lorsque le programme commence , la pile d'appels est vide, puis lorsque la première fonction est appelée , l'adresse de la ligne immédiatement après l'appel de fonction est poussé sur la pile. Lorsque la fonction est terminée, l'adresse de retour se extraites de la pile et l'exécution se poursuit à cette adresse. La pile se dilate et se rétracte en fonction du nombre d'appels de fonction imbriqués.
    Récursivité

    récursivité se produit lorsqu'une fonction s'appelle elle-même . Considérons le code suivant :

    countNodes de fonction ( node) Pour chaque childNode dans nodenodeCount + = 1countNodes ( childNode ) nextEnd fonction

    utilisant une sorte de structure arborescente comme un document XML , ce code compte le nombre de nœuds de l'arbre se trouvant sous un noeud donné . Chaque nœud enfant est compté, alors il est transmis dans la même fonction à compter ses propres nœuds enfants. Cela continue jusqu'à ce que l'enfant n'a pas d'enfants

    Supposons que le nœud typé programmeur au lieu de nœud enfant comme suit : .

    CountNodes de fonction ( node) Pour chaque childNode dans nodenodeCount + = 1countNodes (Node ) nextEnd fonction:

    Dans ce cas , la fonction s'appellerait indéfiniment et un débordement de pile se produit.
    Invisible récursivité

    Dans la plupart des cas, Les développeurs ne sont pas intentionnellement l'écriture de code récursif , mais récursion peuvent se produire de façon plus subtile . Tenez compte de ces trois fonctions:

    loadAccount de fonction ( ) de LoadMainAccount () loadTransactions () End Function

    loadMainAccount de fonction ( ) loadAssociatedAccounts () function function

    d'iPhone de fin loadAssociatedAccounts () de loadAccount ( ) End Function

    Dans ce cas , la récursivité est indirecte lorsqu'une fonction appelle une autre fonction qui appelle par inadvertance la première fonction. Le résultat peut prendre un peu plus longtemps, mais le résultat est un débordement de pile .
    Grands paramètres

    Outre la fonction de suivi des points de retour d'appel, la pile peut également contenir d'autres données . La plupart des langues utilisent la pile pour maintenir les paramètres de fonction et ceux-ci sont habituellement juste pointeurs d'adresses des emplacements de paramètres. Certaines langues poussent paramètres par valeur sur la pile , ce qui peut prendre beaucoup plus d'espace . La taille de pile par défaut pour la plupart des langues gamme de 512K à 1 Mo, si grands paramètres passés par valeur peuvent parfois causer un débordement de pile . Si il est nécessaire de passer de grands paramètres par valeur , consultez le manuel de référence du langage afin de déterminer comment augmenter la pile.
    Variables d'instance
    variables d'instance de

    sont ceux intégrés à l'intérieur de la fonction. Par exemple:

    échantillon de fonction ( ) N = getCounter () Return n * 12end fonction

    La variable n est une variable d'instance , car il n'existe que pendant que l'échantillon de la fonction s'exécute. Dans de nombreuses langues , n est poussé sur la pile , puis s'est détaché lorsque la fonction se termine. Cela fonctionne bien pour les variables simples comme les entiers et les personnages , mais peut remplir la pile lors de grands tableaux sont utilisés. Quand cela devient un problème , pensez à utiliser intégré dans les structures de données comme les chaînes ou les listes . Ces structures allouent généralement mémoire sur le tas , une , beaucoup plus grande zone de mémoire séparée .

    Previous :

    next :
      articles connexes
    ·Comment tester Business Objects 
    ·Comment envoyer des email en utilisant HTML 
    ·Comment créer un lien HTML qui crée un e-mail et vien…
    ·Comment faire pour activer le bouton Supprimer dans Dat…
    ·Comment faire pour résoudre des problèmes mathématiq…
    ·Comment insérer un Div dans un Div 
    ·Fortran fonctions d'erreur 
    ·Pourquoi les ordinateurs communiquent en chiffres plutô…
    ·Microsoft SQL Tutorial 
    ·Comment calculer les frais généraux Switch 
      articles en vedette
    ·Comment faire un Storyboard pour la conception du systè…
    ·Comment créer un service Web simple 
    ·Comment définir la valeur par défaut pour le WPF Comb…
    ·Comment trier une liste chaînée en Java 
    ·Comment lire un fichier à ListBox en C # 
    ·Quels inconvénients sont là dans déréférencement i…
    ·Comment faire pour convertir en UTF-8 en UTF -16 en Per…
    ·Quel est CSV 
    ·Java Spring Vs . Struts 
    ·Comment faire pour masquer des colonnes DataGrid 
    Copyright © Connaissances Informatiques http://fr.wingwit.com