سرریز پشته

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

هنگامی یک نرم‌افزار با سرریز پشته مواجه می‌شود، که حافظه‌ای بیش از پشته فراخوانی را مورد استفاده قرار دهد. پشته‌ی فراخوانی حجم مشخصی از حافظه را در اختیار دارد که عموماً هنگام شروع نرم‌افزار مشخص می‌گردد. این حجم به عوامل مختلفی از جمله معماری کامپیوتر، زبان برنامه‌نویسی و چندنخی بودن نرم‌افزار بستگی دارد.

فراخوانی بازگشتی بی‌نهایت[ویرایش]

یکی از معمول‌ترین دلایل اتفاق افتادن سرریز پشته، تعداد بی‌شمار فراخوانی بازگشتی است، که منجر به پر شدن و سرریز پشته‌ی فراخوانی می‌شود.

نمونه کد سی که این خطا را ایجاد می‌کند:

int foo() {
     return foo();
}

تابع foo آنقدر خودش را صدا می‌زند، تا در نهایت پشته‌ی فراخوانی پر شده و منجر به Segmentation Fault شود.[۱]

متغیر بسیار بزرگ[ویرایش]

یکی دیگر از دلایل معمول بروز سرریز پشته، ساخت متغیری است که حافظه‌ای بیش از ظرفیت پشته داشته باشد.

نمونه کد سی که منجر به بروز این خطا می‌شود:

int foo() {
     double x[1000000];
}

جستارهای وابسته[ویرایش]

منابع[ویرایش]