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