Dator
 |  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Vad är Stack Overflow på Linje 42

    ? En stack overflow inträffar när stacken , överstiger en kritisk datastruktur som finns i varje program som körs , dess minne hejd . Detta tillstånd har flera orsaker , alla symptom på programmeringsfel . Om fel uppstår i en kommersiell eller open source program , kontakta tech-support . Om problemet uppstår när du testar din egen kod , här är några av de vanligaste frågorna som kan ha inträffat på rad 42 . Bakgrund

    Anropsstacken , den vanligaste orsaken till stackspill , har en lista på returen adresser för varje funktion eller metodanrop . När programmet startar , är samtalet stacken tom , sedan när den första funktionen anropas , adressen till raden direkt efter funktionsanropet får skjuts på stacken . När funktionen är klar , blir avsändaradressen poppade av stapeln och exekvering fortsätter på denna adress . Stapeln expanderar och kollapsar beroende på antalet kapslade funktionsanrop.
    Rekursion

    rekursion inträffar när en funktion kallar sig . Betrakta följande kod :

    Funktion countNodes ( nod ) För varje childNode i nodenodeCount + = 1countNodes ( childNode ) NästaSlut funktionen

    använda någon form av trädstruktur som ett XML-dokument , räknar denna kod antal trädnoder finns under en viss nod . Varje barn nod får räknas , så det får skickas in samma funktion för att räkna sina egna underordnade noder . Detta fortsätter tills barnet har inga barn

    Antag programmeraren skrivit noden i stället för barn nod enligt följande : .

    Funktion countNodes ( nod ) För varje childNode i nodenodeCount + = 1countNodes ( Node ) NästaSlut funktion

    i detta fall kommer funktionen kalla sig på obestämd tid och en stack overflow inträffar .
    Dold rekursion

    i de flesta fall , utvecklare inte avsiktligt skriver rekursiv kod , men rekursion kan förekomma på mer subtila sätt . Anser att dessa tre funktioner :

    Funktion loadAccount ( ) LoadMainAccount ( ) loadTransactions ( ) End Function

    Function loadMainAccount ( ) loadAssociatedAccounts ( ) End Function

    funktionen loadAssociatedAccounts ( ) loadAccount ( ) end Function

    i detta fall förekommer rekursion indirekt när en funktion anropar en annan funktion som oavsiktligt anropar först funktionen . Resultatet kan ta lite längre tid , men resultatet är en stack overflow .
    Stora Parametrar

    Förutom spårning återgång larmknappar , stapeln även kan inneha andra uppgifter . De flesta språk använder stacken för att hålla funktionsparametrar och dessa är oftast bara hantera pekare av parametern platser . Vissa språk driva parametrar med värde på stacken och det kan ta betydligt mer utrymme . Standardinställningen stack storlek för de flesta språk varierar från 512K till 1MB , kunde så stora parametrar passerade värde ibland orsaka en stack overflow . Om det finns ett behov av att passera stora parametrar med värde , konsultera manualen språkreferensen att avgöra hur man kan öka stacken .
    Instansvariabler

    Instansvariabler är de inbäddade inuti funktionen . Till exempel :

    Funktion prov ( ) N = getCounter ( ) Avkastning n * 12End funktion

    variabeln n är en instans variabel eftersom den endast existerar medan funktionen provet körs . I många språk , blir n skjuts på stacken , sedan dök upp när funktionen avslutas . Detta fungerar bra för enkla variabler som heltal och tecken , men kan fylla stacken när stora arrayer används . När detta blir ett problem , överväga att använda inbyggda datastrukturer som strängar eller listor . Dessa strukturer allokera oftast minne på högen , en separat , större minne område .

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur man använder bitvisa operationer i låg - nivå pr…
    ·Hur man skickar SMS med ASP.NET
    ·Hur man använder ett fall uttalande i ASP.Net
    ·Hur man skriver ett Effect fil för XNA Spel
    ·Hur man avskedar en ItemDrag händelse
    ·Inaktivera en parallell Query i Oracle
    ·Konvertera CPP fil till EXE
    ·Vad är fördelarna med Top - Down Coding
    ·Definition av 64 Bit GCC
    ·Entity Framework vs NHibernate
    Utvalda artiklarna
    ·Information om Oracle Migration till MySQL
    ·Hur du gör din egen funktion i jQuery
    ·Google Cloaking Tekniker
    ·Hur man skapar mallar Kolumner i GridView
    ·Hur Graph med programvara för Python
    ·Idéer för Ladder Logic
    ·Hur man använder PHP med en termisk skrivare
    ·Hur mata in ett nummer med två decimaler i Visual Basi…
    ·Hur man gör en keylogger i VB
    ·Ställa en cookie med PHP i Ajax
    Copyright © Dator Kunskap http://www.dator.xyz