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]