Datamaskin
  | Hjem | Hardware | Nettverk | Programmering | Software | Feilsøking | Systems | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringsspråk
  • Delphi Programming
  • Java Programming
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl Programming
  • Python Programming
  • Ruby Programming
  • Visual Basics Programming
  •  
    Datamaskin >> Programmering >> Computer Programmeringsspråk >> Content
    Hva er Stack Overflow på Linje 42
    ? En stack overflow oppstår når bunken , overskrider en kritisk datastruktur finnes i hver kjørende program , dets minne grenser. Denne tilstanden har flere årsaker , alle symptomer på programmeringsfeil . Hvis feilen oppstår i en kommersiell eller open source program , ta kontakt med teknisk support . Hvis problemet oppstår mens testing din egen kode , her er noen av de vanligste problemene som kan ha oppstått på linje 42. . Bakgrunn

    Kallstakken , den vanligste årsaken til stack overflow , har en liste over avkastningen adresser til hver funksjon eller metode samtale. Når programmet starter , er samtalen stabelen tom, så når den første funksjonen blir kalt , adressen til linjen umiddelbart etter at funksjonen samtalen blir skjøvet på stakken . Når funksjonen er ferdig, blir avsenderadressen popped av stabelen, og fortsetter å utføre, på denne adressen. Stabelen utvides og minimeres avhengig av antall nestede funksjonskall.
    Rekursjon

    Rekursjon oppstår når en funksjon kaller seg . Vurdere følgende kode :

    Funksjon countNodes ( node ) For hver childNode i nodenodeCount + = 1countNodes ( childNode ) NesteSiste funksjon

    Bruke en slags trestruktur som et XML-dokument , teller denne koden antall tre noder funnet under en gitt node. Hvert barn node blir talt opp, så det blir gått inn i den samme funksjonen for å telle sine egne barn noder . Dette fortsetter til et barn har ingen barn

    Anta programmereren skrevet node i stedet for barnet node som følger: .

    Funksjon countNodes ( node ) For hver childNode i nodenodeCount + = 1countNodes ( Node ) NesteSiste funksjon

    i dette tilfellet , vil funksjonen kalle seg på ubestemt tid og en stack overflow oppstår .
    Hidden Rekursjon

    i de fleste tilfeller , utviklere er ikke med vilje å skrive rekursiv kode , men rekursjon kan oppstå i mer subtile måter . Disse tre funksjoner:

    Funksjon loadAccount ( ) LoadMainAccount ( ) loadTransactions ( ) End funksjon

    Funksjon loadMainAccount ( ) loadAssociatedAccounts ( ) end funksjon

    funksjon loadAssociatedAccounts ( ) loadAccount ( ) end funksjon

    i dette tilfellet oppstår rekursjon indirekte når et funksjonskall en annen funksjon som utilsiktet kaller den første funksjon . Resultatet kan ta litt lenger tid , men resultatet er en stack overflow .
    Store parametere

    tillegg til sporing av funksjon samtale returpunkter , bunken også kan inneholde andre data . De fleste språk bruker bunken for å holde funksjon parametere og disse er vanligvis bare ta pekere til parameter steder . Noen språk presse parametre ved verdi på stakken og dette kan ta betydelig mer plass . Standard stack størrelse for de fleste språk varierer fra 512K til 1MB , så kunne store parametere som sendes av verdi til forårsake en stack overflow . Dersom det er behov for å passere store parametere i verdi , bør språket referansen for å finne ut hvordan du kan øke stabelen .
    Instansvariablene

    Instansvariabler er de innebygde inne i funksjon . For eksempel : en

    Funksjon sample ( ) N = getCounter ( ) Return n * 12End funksjon

    variabel n er et instansvariabel siden det kun eksisterer mens funksjonen prøven utfører . På mange språk , blir n skyves på stakken , deretter spratt av når funksjonen opphører . Dette fungerer fint for enkle variabler som heltall og tegn , men kan fylle ut bunken når store matriser brukes . Når dette blir et problem , bør du vurdere å bruke innebygde datastrukturer som strenger eller lister . Disse strukturene vanligvis allokere minne på haugen , en egen, mye større minneområde .

    früher :

     Weiter:
      Relatert Artike
    ·Hva er en CTP Fil 
    ·Slik viser en Custom Error Screen Når Omstart CF 
    ·Hvordan oppdage Peak i MATLAB 
    ·Hva er fordelene ved top-down Coding 
    ·Om en Binary til Hex File Conversion 
    ·Hvordan å lære SQL -lagrede prosedyrer 
    ·Hvordan bruke en Array i COBOL 
    ·Hvordan lage en deterministisk Finite State Machine 
    ·Slik fjerner mellomrom i SQL 
    ·Hvordan lage en løkke som går på evig på Roblox 
      Anbefalte artikler
    ·Hvordan bruke PHPMailer på en Webform 
    ·Regler som gjelder for Arrays i Visual Basic 2005 
    ·Hvordan lage en krig fil med Eclipse 
    ·Hvordan unngå forekomster heltall 
    ·Forskjellen mellom Interface & Abstract klasse 
    ·Hvordan lage en Server Parse for CSS -filer som PHP 
    ·En trinn- for-trinn veiledning For Visual Basic 
    ·Hvordan Pass med referanse i Java 
    ·Hvordan finne ut om en skrift er monospaced i Java 
    ·Hvordan Plasser en Combo i DataGrid i VB6 
    Copyright ©  Datamaskin  http://www.datamaskin.biz/