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)