Heap Overflow
Heap ใช้เก็บ dynamic variables เป็น region ของ process's memory malloc(), calloc(), resize() ใช้เก็บ dynamic variables
Heap overflow เกิดเมื่อ:
A) จัดสรร dynamic variables จำนวนมาก:
int main() { float *ptr = (int *)malloc(sizeof(float)*1000000.0)); }B) จัดสรรหน่วยความจำต่อเนื่องและไม่ free หลังใช้:
int main() { for (int i=0; i<100000000000; i++) { int *p = (int *)malloc(sizeof(int)); } }Stack Overflow
Stack เป็น Last in First out data structure ใช้เก็บ local variables ภายในฟังก์ชัน พารามิเตอร์และ return addresses ผ่าน stack นี้
ถ้าโปรแกรมใช้หน่วยความจำมากเกินไป Stack overflow จะเกิดขึ้นเพราะ stack size จำกัด
Stack overflow เกิดเมื่อ:
C) ฟังก์ชันถูกเรียก recursively โดยตัวเอง infinite times stack จะเก็บ local variables จำนวนมากไม่ได้:
void calculate(int a) { if (a== 0) return; a = 6; calculate(a); } int main() { int a = 5; calculate(a); }D) ประกาศ local variables จำนวนมาก หรือ array/matrix ขนาดใหญ่:
int main() { A[20000][20000] }