سرریز پشته
هنگامی یک نرمافزار با سرریز پشته مواجه میشود، که حافظهای بیش از پشته فراخوانی را مورد استفاده قرار دهد. پشتۀ فراخوانی حجم مشخصی از حافظه را در اختیار دارد که عموماً هنگام شروع نرمافزار مشخص میگردد. این حجم به عوامل مختلفی از جمله معماری کامپیوتر، زبان برنامهنویسی و چندنخی بودن نرمافزار بستگی دارد.
فراخوانی بازگشتی بینهایت
یکی از معمولترین دلایل اتفاق افتادن سرریز پشته، تعداد بیشمار فراخوانی بازگشتی است، که منجر به پر شدن و سرریز پشتۀ فراخوانی میشود.
نمونه کد سی که این خطا را ایجاد میکند:
int foo() {
return foo();
}
تابع foo آنقدر خودش را صدا میزند، تا در نهایت پشتۀ فراخوانی پر شده و منجر به Segmentation Fault شود.
متغیر بسیار بزرگ
یکی دیگر از دلایل معمول بروز سرریز پشته، ساخت متغیری است که حافظهای بیش از ظرفیت پشته داشته باشد.
نمونه کد سی که منجر به بروز این خطا میشود:
int foo() {
double x[1000000];
}
جستارهای وابسته
- سرریز میانگیر
- پشته فراخوانی
- سرریز پشته میانگیر
- سرریز بافر پشته
منابع
- «Understanding Stack Overflow». دریافتشده در ۲۵ آذر ۱۳۹۰.