Bài tập

Cấp phát bộ trong động C/C++ – malloc, realloc, calloc, new

Huy Erick

Trong ngôn ngữ C/C++, khi nhắc đến con trỏ, ta không thể không đề cập đến việc cấp phát bộ nhớ động. Trong bài viết này, chúng ta sẽ đi tìm hiểu về cách cấp...

Trong ngôn ngữ C/C++, khi nhắc đến con trỏ, ta không thể không đề cập đến việc cấp phát bộ nhớ động. Trong bài viết này, chúng ta sẽ đi tìm hiểu về cách cấp phát bộ nhớ động sử dụng các hàm malloc(), calloc(), realloc() trong C và new trong C++.

Cấp phát bộ nhớ trong C

Để sử dụng các hàm malloc(), calloc() và realloc(), ta cần khai báo thư viện stdlib.h.

Hàm malloc()

ptr = (cast_type *) malloc(byte_size);

Trong đó:

  • cast_type: kiểu dữ liệu con trỏ
  • malloc: Gọi hàm malloc để cấp phát bộ nhớ cho con trỏ ptr
  • byte_size: Số byte cấp phát

Ví dụ sử dụng:

int *a; a = (int *) malloc(5 * sizeof(int));

Chạy chương trình trên, bạn sẽ gặp lỗi vì con trỏ a chưa được cấp phát bộ nhớ. Ta sử dụng hàm malloc để cấp phát bộ nhớ như sau:

a = (int *) malloc(5 * sizeof(int));

Sau khi đã cấp phát bộ nhớ, chương trình sẽ hoạt động bình thường.

Hàm calloc()

ptr = (cast_type *) calloc(n, size);

Trong đó:

  • (cast_type *): Kiểu dữ liệu con trỏ
  • calloc: Gọi hàm calloc để cấp phát bộ nhớ
  • n: Số lượng phần tử cần cấp phát
  • size: Kích thước của kiểu dữ liệu (kích thước 1 phần tử)

Ví dụ sử dụng:

int *a; a = (int *) calloc(5, sizeof(int));

Hàm realloc()

Hàm realloc() sử dụng để cấp phát lại, hay cấp phát thêm bộ nhớ cho con trỏ đã được cấp phát bộ nhớ với hàm calloc hoặc malloc trước đó.

Ví dụ sử dụng:

int *str; str = (int *) malloc(14 * sizeof(int)); str = (int *) realloc(str, 100 * sizeof(int));

Cấp phát bộ nhớ trong C++

Trong C++, thay vì sử dụng hàm malloc(), calloc() và realloc(), ta có thể sử dụng từ khóa new để cấp phát bộ nhớ.

ptr = new cast_type(size);

Trong đó:

  • cast_type: Kiểu dữ liệu
  • size: Số ô nhớ

Ví dụ sử dụng:

int *a; a = new int(5);

Cảm ơn bạn đã đọc hết bài viết!! Sau khi đã cấp phát bộ nhớ, ta cần giải phóng bộ nhớ. Bài viết tiếp theo sẽ giải thích về việc giải phóng bộ nhớ động trong C/C++ sử dụng hàm free() và delete.

Xem tất cả bài viết chủ đề C/C++ tại đây

1