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

delete[] biết kích thước mảng như thế nào trong C++

Khi dùng new[] cấp phát mảng, trình biên dịch/run-time lưu trữ số lượng phần tử (hoặc kích thước byte) trong một header ẩn trước địa chỉ trả về. delete[] đọc header này để biết bao nhiêu destructor cần gọi và bao nhiêu bộ nhớ giải phóng.

Ví dụ: Mảng 2D động (mảng con trỏ)

#include <iostream>
using namespace std;

int main() {
    const int ROWS = 4, COLS = 5;
    int** a = new int*[ROWS]; // cấp phát mảng con trỏ hàng

    for (int i = 0; i < ROWS; ++i)
        a[i] = new int[COLS]; // cấp phát từng hàng

    // Khởi tạo
    for (int i = 0; i < ROWS; ++i)
        for (int j = 0; j < COLS; ++j)
            a[i][j] = i;

    // In
    for (int i = 0; i < ROWS; ++i) {
        for (int j = 0; j < COLS; ++j)
            cout << a[i][j] << ' ';
        cout << '\n';
    }

    // Giải phóng: XÓA TỪNG HÀNG TRƯỚC, SAU ĐÓ XÓA MẢNG CON TRỎ
    for (int i = 0; i < ROWS; ++i)
        delete [] a[i];
    delete [] a;

    return 0;
}

Kết quả

0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3

Quan trọng: Mỗi new[] phải có đúng một delete[] tương ứng. Với mảng 2D kiểu int**, phải xóa từng hàng trước, rồi xóa mảng con trỏ hàng.