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

Tại sao C++ không hỗ trợ hàm trả về mảng

C++ không cho phép hàm trả về kiểu mảng (array type) trực tiếp vì mảng không thể copy/assign như kiểu dữ liệu thông thường.

Ví dụ sai (cảnh báo compiler)

int* Array() {
    int a[100]; // mảng cục bộ trên stack
    a[0] = 7; a[1] = 6; a[2] = 4; a[3] = 3;
    return a; // CẢNH BÁO: trả về địa chỉ biến cục bộ!
}

Lý do: Mảng a được cấp phát trên stack, bộ nhớ bị giải phóng khi hàm kết thúc. Con trỏ trả về trỏ đến bộ nhớ đã giải phóng (dangling pointer) → undefined behavior.

Giải pháp đúng

  1. Cấp phát động (heap): int* a = new int[100]; → caller phải delete[].
  2. Dùng std::array (kích thước cố định, có thể trả về bằng giá trị).
  3. Dùng std::vector (kích thước động, quản lý bộ nhớ tự động).
  4. Dùng struct/class bao mảng (có thể trả về bằng giá trị nhờ copy constructor).

C++ hiện đại khuyến khích dùng std::vector hoặc std::array thay vì mảng C-style thô.