Module 14: Cấp phát bộ nhớ động
Cấp phát bộ nhớ động
malloc - Cấp phát bộ nhớ
int *arr = (int*)malloc(n * sizeof(int));
if (arr == NULL) { printf("Khong du bo nho!"); exit(1); }
calloc - Cấp phát và khởi tạo 0
int *arr = (int*)calloc(n, sizeof(int)); // tat ca = 0
realloc - Thay đổi kích thước
arr = (int*)realloc(arr, new_size * sizeof(int));
if (arr == NULL) { /* loi */ }
free - Giải phóng bộ nhớ
free(arr);
arr = NULL; // tranh dangling pointer
Memory leak
Xảy ra khi malloc nhưng không free. Dùng valgrind để kiểm tra:
valgrind --leak-check=full ./program
Lưu ý
- Luôn kiểm tra NULL sau malloc/calloc/realloc
- Giải phóng đúng 1 lần (double-free gây crash)
- Không dùng con trỏ sau khi free (dangling pointer)