Welkom op de Nederland Computer Kennisnetwerk!  
 
Zoeken computer kennis
Home Hardware Netwerken Programmering Software Computerstoring Besturingssysteem
Computer Kennis >> Programmering >> Computer Programming Languages >> Content
Wat is Stack Overflow bij Lijn 42 ?
Een stack overflow treedt op wanneer de stapel , een kritische data structuur gevonden in elk lopend programma , hoger is dan zijn geheugen grenzen . Deze voorwaarde heeft verschillende oorzaken , allemaal symptomen van programmeerfouten . Als de fout optreedt in een commerciële of open source programma , contact met tech - support . Als het probleem zich voordoet tijdens het testen van uw eigen code , hier zijn een paar van de meest voorkomende problemen die zich hebben voorgedaan op lijn 42 . Achtergrond |

De call stack
, de meest voorkomende oorzaak van stack overflows , houdt een lijst bij van de terugkeer adressen van elke functie of methode. Wanneer het programma begint , de call stack leeg is , dan wanneer de eerste functie wordt aangeroepen , het adres van de lijn direct na de functie oproep op de stack wordt geduwd . Wanneer de functie is voltooid , wordt het retouradres popped uit de stack en de uitvoering verder op dit adres . De stack uit en stort afhankelijk van het aantal geneste functie oproepen .
Recursion

Recursion
treedt op wanneer een functie noemt zichzelf . Beschouw de volgende code :

Functie countNodes
( knooppunt ) Voor elke childNode in nodenodeCount + = 1countNodes ( childNode ) VolgendeEinde functie

Met een soort boomstructuur zoals een XML-document , deze code telt de aantal knooppunten vinden onder een bepaalde node. Elk kind knooppunt wordt geteld , dan is het wordt doorgegeven in dezelfde functie aan haar eigen kind nodes te tellen . Dit gaat door totdat een kind heeft geen kinderen

Stel dat de programmeur getypte knooppunt in plaats van kind knooppunt als volgt : .

Functie countNodes
( knooppunt ) Voor elke childNode in nodenodeCount + = 1countNodes ( Node ) VolgendeEinde functie

In dit geval zal de functie zelf onbeperkt bellen en een stack overflow optreedt .
Verborgen Recursion

In de meeste gevallen , ontwikkelaars zijn niet opzettelijk schrijven recursieve code , maar recursie kan voorkomen bij meer subtiele manieren . Beschouw deze drie functies :

Functie loadAccount
( ) LoadMainAccount ( ) loadTransactions ( ) End functie

Function loadMainAccount
( ) loadAssociatedAccounts ( ) end functie

functie
loadAssociatedAccounts ( ) loadAccount ( ) end functie

In dit geval treedt recursie indirect als een functie roept een functie die de eerste functie onbedoeld oproepen . Het resultaat kan iets langer duren , maar het resultaat is een stack overflow .
Grote Parameters

Naast tracking-functie oproep terugkeer punten , de stack kan ook andere gegevens bevatten . De meeste talen gebruik maken van de stack naar functie parameters vast te houden en deze zijn meestal alleen maar pakken wijzers van de parameter locaties . Sommige talen drukken parameters van waarde op de stapel en dit kan aanzienlijk meer ruimte innemen . De standaard stack grootte voor de meeste talen variëren van 512K naar 1MB , kon zo groot parameters doorgegeven door de waarde af en toe leiden tot een stack overflow . Als er behoefte is aan grote parameters voorbij waarde , raadpleeg dan de taal handleiding om te bepalen hoe de stapel te verhogen .
Aanleg Variabelen

aanleg variabelen
zijn die ingebed binnen de functie . Bijvoorbeeld :

Functie sample
( ) N = getCounter ( ) Return n * 12End functie

De variabele n is een instantie variabele omdat het bestaat alleen wanneer de functie steekproef uitvoert . In vele talen , krijgt n op de stack geduwd , vervolgens dook af wanneer de functie wordt beëindigd . Dit werkt prima voor eenvoudige variabelen zoals integers en personages , maar kan de stapel te vullen wanneer grote arrays worden gebruikt . Wanneer dit wordt een probleem , overwegen met behulp van ingebouwde data structuren zoals strings of lijsten . Deze structuren meestal toe te wijzen geheugen op de heap , een aparte , veel groter geheugen gebied .

Previous: Next:
  Computer Programming Languages
·Hoe kan ik een printer String …
·Verbinding maken met Access in…
·Qt Designer Tutorials 
·Wat is een RSE in LabVIEW ? 
·Hoe maak je een Raid Controlle…
·Hoe maak je een Commit in Subv…
·Kunt u Dood een discussie zond…
·Hoe te Crystal Reports gebruik…
·Hoe kan ik een InputBox gebrui…
  Related Articles
Wat is VBA ? 
Wat zijn de functies van Visual Basic ? 
Wat is een Visual Basic DataGrid ? 
Hoe het verhogen van Stack Grootte in Vi…
Wat is een Array in Visual Basic ? 
Wat is de Visual Basic IDE ? 
Wat is Visual Studio Express ? 
Wat is Visual Basic 6.0 ? 
Wat is OCX in Visual Basic ? 
  Programmering Articles
·Hoe te verbergen Modules , Projecten en …
·Hoe maak je een Autorun Inf bestand make…
·Hoe te gebruiken HTML Block Elements 
·Hoe de Java Error Message Logs Problemen…
·Array Index Out of Bounds Uitzondering i…
·Hoe maak je een Game App voor Vrije 
·HTML Vs . PHP Omleidingen 
·Hoe te Pivot Tables Met VBA Consolideren…
·Hoe toegang Python docstring 
Copyright © Computer Kennis http://www.nldit.com