Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Heap Overflow và Stack Overflow trong C++


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
    }
}