verem túlcsordulás

A szoftver stack túlcsordulás (Engl. Veremtúlcsordulás) akkor jelentkezik, ha tárolva a hívás verem több adatot képes tárolni. Jellemzően verem kapacitás van beállítva a program start / patak. Ha a stack pointer túlmutat a program összeomlik. [1]

Ez a hiba akkor fordul elő három okból. [2]

A legegyszerűbb példa a végtelen rekurzió C:

A függvény hívja magát, fogyasztása helyet a stack, míg a verem nem teljes és nem fog megtörténni szegmentációs hiba. [3]

Ez egy kifinomult például a valós kód végtelen rekurzió előfordulhat két okból:

Nem működött a kilépési feltétel a rekurzió

A leggyakoribb oka a verem túlcsordulás - ha alatt néhány szélsőséges körülmények között a befejezés feltétele nem tesztelt rekurzió nem működik.

A program bemegy egy végtelen ciklus, amikor a negatív n.

Sok nyelv do optimalizálása, a továbbiakban: „farok rekurzió”. Rekurzió, végén található a függvény, átalakítjuk egy hurkot, és nem fogyaszt verem [4]. Ha ezt az optimalizálási munka, hanem egy halom túlcsordulás hurok.

Programozó írta rekurzió, nem veszik észre

A programozó levelet rekurziót és akaratlanul is - például, amikor ugyanazt a funkciót végre több túlterhelt függvények, és az egyik oka a másik.

Az interfész keretek, mint a Qt és VCL rekurzió is előfordulhat, ha a kezelőt, például változások terén programozó magát ezen a területen, és a változás.

Nagyon mély rekurzió

ezt a kódot tönkreteheti a láncolt lista:

Ez az algoritmus, ha a lista nem romlott elméletileg futtatására a véges időt kérve O (n) a köteg. Természetesen a hosszú listát a program leáll. Lehetséges megoldások:

  • Találni egy nem-rekurzív algoritmus (nagyszerűen működik ebben a példában).
  • Átutalási rendszer rekurzió verem dinamikusan hozzárendelt (például ha elmozdulási különböző hálózatok [5]).
  • Ha a rekurzió elment mély, egy másik módszerrel. Például gyorsan rendezés - rendkívül hatékony rendezési módszer, amely szélsőséges esetben jár jelentős mennyiségű verem. Ezért a végrehajtás a fajta programozási nyelvek korlátozza a rekurzió mélységét, és ha a „pihent” a határ, a lassabb módszer, mint egy piramis. Így például Introsort.

Nagy változók a stack

A tömb 8 megabájt memóriát; ha a verem nincs ilyen mennyiségű memória túlcsordulás történik.

Bármi, ami csökkenti az effektív stack mérete növeli a túlcsordulás. Például folyik rendszerint a köteg kisebb, mint a fő program - így a program fut egyszálas és többszálas tagadni. Futó magmódban rutinok gyakran használják mások verem, így amikor a programozás magmódban próbálják, hogy nem használja a rekurzió és a nagy lokális változók. [7] [8]