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
- Cấp phát động (heap):
int* a = new int[100];→ caller phảidelete[]. - Dùng std::array (kích thước cố định, có thể trả về bằng giá trị).
- Dùng std::vector (kích thước động, quản lý bộ nhớ tự động).
- 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ô.