Stack Overflow คือ เว็บบอร์ด programmer ระดับตำนาน เฮ้ย อาการที่โปรแกรมเกิดการแครช หรือพังลงมา เนื่องจากมีการใช้งานพื้นที่ Stack Memory จนล้นทะลุขีดจำกัดที่ระบบปฏิบัติการหรือคอมไพเลอร์กำหนดไว้ครับ ลองจินตนาการถึงการซ้อนจานใบใหม่ทับไปเรื่อย ๆ ถ้าซ้อนสูงเกินไปจนชนเพดาน จานก็จะล้มครืนลงมา นั่นคือสิ่งที่เกิดขึ้นกับหน่วยความจำเลยครับ
สาเหตุหลักที่ทำให้เกิด Stack Overflow
การเรียกฟังก์ชันซ้ำตัวเองแบบไม่รู้จบ
นี่คือสาเหตุยอดฮิตอันดับหนึ่งครับ ปกติเวลาฟังก์ชันถูกเรียกใช้งาน ระบบจะสร้างบล็อกข้อมูลที่เรียกว่า Stack Frame วางซ้อนทับกันใน Stack ถ้าระบุเงื่อนไขการหยุดไม่ดี หรือลืมใส่จุดสิ้นสุด ฟังก์ชันจะเรียกตัวเองไปเรื่อย ๆ ทำให้ Stack Frame ถูกสร้างซ้อนกันจนล้น ลองดูตัวอย่างโค้ด C# สั้น ๆ ครับ เมื่อโค้ดนี้รัน มันจะเอาข้อมูลของ PrintNumber ไปสุมไว้ใน Stack รัว ๆ จนกระทั่ง Stack เต็ม และโยน Error StackOverflowException ออกมาทำให้โปรแกรมดับไปเลยครับ
Plain Text
public void PrintNumber (int n) { // ลืมเขียนเงื่อนไขเพื่อหยุด (เช่น if (n <= 0) return;) Console.WriteLine (n) ; PrintNumber (n - 1) ; // ฟังก์ชันเรียกตัวเองซ้ำไปเรื่อย ๆ ไม่มีวันจบ
}