حساب کاربری
​
زمان تقریبی مطالعه: 1 دقیقه
لینک کوتاه

سرریز پشته

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

فهرست

  • ۱ فراخوانی بازگشتی بی‌نهایت
  • ۲ متغیر بسیار بزرگ
  • ۳ جستارهای وابسته
  • ۴ منابع

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

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

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

int foo() {
     return foo();
}

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

متغیر بسیار بزرگ

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

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

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

جستارهای وابسته

  • سرریز میانگیر
  • پشته فراخوانی
  • سرریز پشته میانگیر
  • سرریز بافر پشته

منابع

  1. ↑ What is the difference between a segmentation fault and a stack overflow?
  • «Understanding Stack Overflow». دریافت‌شده در ۲۵ آذر ۱۳۹۰.
آخرین نظرات
کلیه حقوق این تارنما متعلق به فرا دانشنامه ویکی بین است.