| Hjem | Hardware | Netværk | Programmering | software | Fejlfinding | systemer | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringssprog
  • Delphi programmering
  • Java programmering
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl programmering
  • Python Programming
  • Ruby Programming
  • Visual Basics Programmering
  •  
    Computer Viden >> Programmering >> Computer Programmeringssprog >> Content
    Hvad er Stack Overflow på linje 42
    ? En stak overflow opstår, når stakken , et kritisk datastruktur findes i hvert kørende program , overskrider sin hukommelse grænser. Denne betingelse har flere årsager , alle symptomer på programmeringsfejl . Hvis fejlen opstår i en kommerciel eller open source program , skal du kontakte tech-support . Hvis problemet opstår, mens teste din egen kode , her er et par af de mest almindelige problemer , der kan have opstod ved linie 42. . Baggrund

    kaldstakkens , den mest almindelige årsag til stack overflow , har en liste over afkastet adresser på hver enkelt funktion eller metode opkald . Når programmet starter , kaldstakkens er tom , så når den første funktion bliver kaldt , adressen på den linje umiddelbart efter funktion opkald bliver skubbet på stakken . Når funktionen er færdig , bliver afsenderadressen poppet fra stakken og udførelse fortsætter på denne adresse . Stakken udvider og kollapser afhængigt af antallet af indlejrede funktionskald .
    Recursion

    Recursion opstår, når en funktion kalder sig selv . Betragt følgende kode :

    Funktion countNodes ( node ) For hver childNode i nodenodeCount + = 1countNodes ( childNode ) nextEnd funktion

    hjælp af en slags træstruktur som et XML-dokument , denne kode tæller antallet af træet noder fundet under en given node. Hvert barn node bliver talt , så det bliver gået ind den samme funktion til at tælle sine egne underordnede noder. Dette fortsætter, indtil et barn har ingen børn

    Antag programmøren maskinskrevne node i stedet for barneknudepunkt som følger: .

    Funktion countNodes ( node ) For hver childNode i nodenodeCount + = 1countNodes ( Node ) nextEnd funktionen

    i dette tilfælde vil funktionen kalde sig det uendelige, og en stak overflow opstår.
    Skjulte Recursion

    i de fleste tilfælde , udviklere er ikke med vilje at skrive rekursive kode, men rekursion kan forekomme i mere subtile måder . Overvej disse tre funktioner:

    Function loadAccount () LoadMainAccount () loadTransactions ( ) End funktionen

    Function loadMainAccount () loadAssociatedAccounts ( ) ende -funktion

    funktion loadAssociatedAccounts () loadAccount ( ) ende -funktion

    i dette tilfælde rekursion sker indirekte, når en funktion kalder en anden funktion , der uforvarende kalder den første funktion . Resultatet kan tage lidt længere tid , men resultatet er en stak overflow .
    Store Parametre

    Udover sporing funktion opkald retur punkter stakken også kan have andre data . De fleste sprog bruger stakken til at holde funktions parametre, og disse er som regel bare fat pointers af parameter placeringer. Nogle sprog skubbe parametre i værdi på stakken og det kan tage betydeligt mere plads. Som standard stack størrelse for de fleste sprog spænder fra 512K til 1MB , så kunne store parametre videre efter værdi imellem forårsage en stak overflow . Hvis der er behov for at passere store parametre i værdi , konsultere sproget reference manual til at bestemme , hvordan man kan øge stakken.
    Instansvariabler

    Instansvariabler er dem indlejret inde i funktion. For eksempel : Hej

    Function prøve ( ) N = getCounter () Return n * 12End funktion

    variable n er en instans variabel , da den kun eksisterer , mens funktionen prøven henretter . I mange sprog , bliver n skubbes ind i stakken , og derefter dukkede off , når funktionen ophører . Det virker fint for simple variabler som heltal og tegn , men kan fylde stakken når store arrays er brugt. Når dette bliver et problem , overveje at bruge indbyggede datastrukturer som strenge eller lister. Disse strukturer normalt afsætte hukommelse på bunke , en separat, meget større hukommelse område.

    Forrige :

    næste :
      Relaterede artikler
    ·Hvordan man laver en MARC Record 
    ·Sådan Debug Med Eclipse JSP 
    ·HTML Drop Down boks Tutorial 
    ·Sådan Test for ulige eller lige numre i Matlab 
    ·Sådan Indsæt flere rækker fra SPUFI 
    ·Sådan oprettes Socket Eksempler i Ada 
    ·Sådan angiver et interface i UML 
    ·Sådan læses en Punch Card 
    ·Forskellen mellem FORTRAN Funktioner og Subrutiner 
    ·Størrelse og MaxLaengde Egenskaber af en TextBox 
      Anbefalede Artikler
    ·Sådan Manuelt installere Perl Modul om Windows Vista 
    ·Hvordan til at gøre en boble sortere 
    ·Hvordan virker PHP Få den rigtige Cookie 
    ·Sådan Læs et objekt i jQuery 
    ·Sådan Beregn Tidsforskel Med PHP 
    ·Sådan justeres PHP Initialiseringsparametre 
    ·Sådan oprettes en skabelon for en PHP side 
    ·Sådan opdaterer My Java-applet cache 
    ·Hvilke værktøjer gør Computer programmører bruger 
    ·Sådan oprettes en PHP Database om JustHost 
    Copyright © Computer Viden http://www.computerdk.com