Stack overflow – tai programavimo klaida, kai bandymas įrašyti duomenis į tam tikrą atminties bloką nepavyksta, nes bloke nebelieka vietos. Šio tipo klaidos įvyksta taip pat, kaip buferio perpildymas, krūvos perpildymas ir dėklo buferio perpildymas. Skirtumas tarp šių tipų klaidų priklauso nuo naudojamos kompiuterio duomenų struktūros, o bendras bruožas yra tas, kad bandoma įrašyti daugiau duomenų, nei yra laisvos vietos jiems laikyti.
Krūvos perpildymo simptomai gali skirtis atsižvelgiant į naudojamą kompiuterio kalbą ir turimą klaidų ataskaitų teikimo įrangą. C++ kalboje dėklo perpildymas dažnai pasireiškia kaip segmentavimo klaida ir dažnai nepateikiama papildomos informacijos, leidžiančios nustatyti, kur ir kaip įvyko perpildymas. „Java“ perpildymas dažnai sukelia virtualios mašinos strigtį, kuri pateikia pakankamai išsamų klaidos failą. Nepriklausomai nuo kalbos, kuria įvyksta perpildymas, perpildymą beveik visada galima ištaisyti tinkamai derinant ir identifikuojant pradinį perpildymo šaltinį.
Kompiuterių kalbas, kuriose siūlomas aiškus atminties valdymas, dažnai lengviau apsaugoti nuo dėklo perpildymo. Plačiai priimta programavimo praktika paprastai reikalauja, kad kiekvienam atminties segmentui, kurį programa skiria, programa taip pat turėtų ištrinti save. C++ leidžia šį mechanizmą, o kruopštus stebėjimas tokiu būdu gali sumažinti programos naudojamą atminties kiekį iki minimumo. Kalbas, kurios nesiūlo aiškaus atminties valdymo, o naudoja netiesioginį atminties valdymą, yra sunkiau apsaugoti nuo krūvos perpildymo klaidų. „Java“ tvarko savo atmintį savo virtualioje mašinoje, todėl duomenų negalima aiškiai ištrinti, kad būtų daugiau vietos.
Dažna pradedančiųjų programuotojų klaida yra manyti, kad dėklo perpildymas negali įvykti kompiuterių kalbomis, kurios tvarko savo atmintį. Nors iš pradžių tai atrodo tikėtina, iš tikrųjų taip nėra. Kalbos su numanomu atminties valdymu dažnai turi šiukšlių rinktuvus, kurie atlaisvina nereikalingus atminties blokus, tačiau šie šiukšlių rinktuvai ne visada veikia programuotojo laukiamu laiku. Pasikliauti šiukšlių surinkėjais yra gana pavojinga ir ji ne visada gali apsaugoti programą nuo perpildymo klaidos.
Perpildymo klaidos gali būti kataklizminės ir sustabdyti visą programą, arba jos gali būti beveik tylios ir leisti programai tęsti. Šias antrojo tipo klaidas dažnai yra sunkiausia rasti, nes gali atsirasti klaida, atsiradusi dėl daugelio kodo eilučių perpildymo. Dėl dėklo perpildymo dažnai nereikia ieškoti visos programos, tačiau kuo ilgiau programa gali veikti po perpildymo, tuo sunkiau rasti ir ištaisyti klaidą.