Trong lập trình C/C++, có hai vùng nhớ được cấp phát: vùng nhớ tĩnh (chứa biến toàn cục, biến cục bộ – được cấp phát khi biên dịch/khi chương trình bắt đầu chạy) và vùng nhớ động (được cấp phát trong lúc chương trình đang chạy). Việc quản lý vùng nhớ động rất quan trọng để tránh lỗi và giúp chương trình chạy hiệu quả.
📌 1. Vùng nhớ cấp phát động là gì?
Vùng nhớ cấp phát động là phần bộ nhớ được tạo ra khi chương trình đang chạy, thường dùng khi ta không biết trước kích thước dữ liệu.
Ví dụ: tạo mảng có kích thước do người dùng nhập.
⚙️ 2. Cách cấp phát và giải phóng bộ nhớ:
Trong C:
malloc(size)– cấp phát vùng nhớ với số byte xác định.calloc(n, size)– cấp phát vùng nhớ chonphần tử, mỗi phần tửsizebyte, và giá trị mặc định của mỗi phần tử là 0.realloc(ptr, new_size)– thay đổi kích thước vùng nhớ đã cấp phát.free(ptr)– giải phóng vùng nhớ.
Ví dụ:
int* arr = (int*)malloc(10 * sizeof(int));
if (arr != NULL) {
// sử dụng arr
free(arr); // giải phóng vùng nhớ
}
Trong C++:
new– cấp phát vùng nhớ.delete– giải phóng vùng nhớ.
Ví dụ:
int* arr = new int[10];
// sử dụng arr
delete[] arr; // giải phóng vùng nhớ
🚨 3. Lỗi thường gặp
- Rò rỉ bộ nhớ (Memory Leak): Quên giải phóng vùng nhớ sau khi dùng.
- Truy cập vùng nhớ đã giải phóng: Gây lỗi chương trình.
- Không kiểm tra con trỏ NULL: Dễ gây crash nếu cấp phát thất bại.
✅ 4. Mẹo quản lý bộ nhớ tốt
- Luôn kiểm tra kết quả cấp phát (
if (ptr == NULL)) - Giải phóng vùng nhớ khi không dùng nữa rồi gán con trỏ quản lý = NULL để tránh việc trỏ vào vùng nhớ đã bị giải phóng.
- Trong C++, nên dùng smart pointer như
unique_ptr/shared_ptrđể tự động quản lý bộ nhớ.
Ví dụ:
#include <memory>
std::unique_ptr<int[]> arr(new int[100]);
// Không cần delete[], bộ nhớ sẽ tự giải phóng
📚 5. Kết luận
Quản lý vùng nhớ cấp phát động giúp chương trình chạy ổn định và tránh lỗi.
Dù là C hay C++, bạn nên cẩn thận khi cấp phát và giải phóng bộ nhớ. Viết code rõ ràng, kiểm tra kỹ và dùng công cụ hỗ trợ sẽ giúp bạn lập trình tốt hơn.
Thẻ: C++, cấp phát động, cấp phát tĩnh
Phát Đạt
Kiến thức hay, áp dụng thực tế, cảm ơn ad