Heap Overflow
Heap lưu biến cấp phát động (malloc, new). Heap overflow xảy ra khi:
- Cấp phát quá nhiều bộ nhớ một lần:
malloc(1e12). - Cấp phát lặp trong vòng lặp không
free/delete(memory leak dẫn đến cạn kiệt heap).
Stack Overflow
Stack lưu biến cục bộ, tham số, địa chỉ trả về. Kích thước stack giới hạn (thường 1-8 MB). Stack overflow khi:
- Đệ quy vô hạn hoặc quá sâu:
void f(){ f(); }. - Khai báo mảng cục bộ quá lớn:
int a[1000000];trong hàm.
Ví dụ Stack Overflow
void recurse(int n) {
if (n == 0) return;
int big[10000]; // Tốn stack lớn
recurse(n-1);
}
int main() { recurse(10000); } // Crash
Ví dụ Heap Overflow
int main() {
for (int i=0; i<1000000; i++) {
int *p = new int[10000]; // Leak, heap cạn
}
}