1
Có những kiểu cấp phát động nào trong C/C++?
1
Ngọc Thành160 đã đăng:

thêm bình luận...
1
xuans2huy510 đã đăng:

Trong ngôn ngữ lập trình C

Bạn sẽ có 3 cách cấp phát động bộ nhớ như sau,

Cách 1: dùng hàm malloc

Cú pháp của hàm malloc:

void *malloc(size_t size);

Trong đó:

  • size là số lượng phần tử của mảng và có kiểu là size_t (không có gì đặc biệt chỗ này cả, size_t có thể xem như kiểu số nguyên không dấu unsigned int đa số trong các trường hợp, bạn có thể đọc thêm Kiểu dữ liệu size_t trong C++ là gì? để hiểu rõ hơn).

Khi nào sử dụng hàm malloc:

Sử dụng hàm malloc khi bạn muốn cấp phát bộ nhớ với kiểu dữ liệu xác định và giá trị của các phần tử trong mảng sau khi cấp phát được mặc định là giá trị rác

Ví dụ về cách sử dụng hàm malloc:

Cấp phát bộ nhớ cho một mảng A chứa 10 phần tử với mỗi phần tử có kiểu dữ liệu số nguyên,

int n = 3; //n là số lượng phần tử của mảng A
int *A = (int *)malloc(n); // (2)
// Mảng A sau khi cấp phát sẽ có giá trị rác ví dụ: [-36844083, 16645629, 1404447253]

Ý nghĩa của câu lệnh thứ (2) như sau, hàm malloc nhận vào tham số n là số lượng phần tử cần được cấp phát bộ nhớ, theo cú pháp, bản thân hàm malloc là một con trỏ void cho nên chúng ta cần phải ép kiểu sang con trỏ kiểu số nguyên bằng cách thêm vào (int *) với mục đích trả về con trỏ số nguyên để lưu vào con trỏ số nguyên A là điều mà chúng ta mong muốn.

Cách 2: dùng hàm calloc

Cú pháp của hàm calloc:

void *calloc (size_t num, size_t type);

Trong đó:

  • num là số lượng phần tử của mảng.
  • type là kiểu dữ liệu của giá trị mà mảng của bạn sẽ chứa.

Khi nào sử dụng hàm calloc:

Sử dụng hàm calloc khi bạn muốn cấp phát bộ nhớ với kiểu dữ liệu xác định và giá trị các phần tử trong mảng sau khi cấp phát được mặc định là 0.

Ví dụ về cách sử dụng hàm calloc:

int n = 3;
int *A = (int *)calloc(n, sizeof(int)); //(2)
// A sau khi cấp phát có giá trị mặc định là: [0, 0, 0]

Cách câu lệnh thứ (2) hoạt động cũng tương tự như ở hàm malloc.

Cách 3: dùng hàm realloc

Cú pháp của hàm realloc:

void *realloc(void *ptr, size_t size)

Trong đó:

  • *ptr là con trỏ tới mảng bạn muốn.
  • size là số lượng phần tử mới của mảng.

Khi nào sử dụng hàm realloc:

Sử dụng hàm realloc khi bạn muốn thay đổi kích thước bộ nhớ đã được cấp phát trước đó bởi hàm malloc hoặc calloc.

Ví dụ về sử dụng hàm realloc:

int n = 3;
int *A = (int *)malloc(n); //Cấp phát bộ nhớ cho mảng A bởi hàm malloc
A = (int *)realloc(A, 5); // (3)

Câu lệnh thứ (3) đã thay đổi kích thước của mảng A từ có thể chứa 3 phần tử số nguyên lên có thể chứa 5 phần tử số nguyên.

Để giải phóng bộ nhớ được cấp phát bởi các hàm malloc(), calloc()realloc() sử dụng câu lệnh free()

Ví dụ để giải phóng bộ nhớ của mảng A sử dụng câu lệnh free(A);

Trong ngôn ngữ lập trình C++

Rất đơn giản, bạn có thể sử dụng từ khóa new để cấp phát động cho mảng, cụ thể như sau,

int n = 10; // n là số phần tử của mảng
int *A = new int[n]; // Cấp phát bộ nhớ cho mảng số nguyên có n phần tử
float *A = new float[n]; // Cấp phát bộ nhớ cho mảng số thực có n phần tử

Để giải phóng bộ nhớ đã cấp phát cho mảng, dùng từ khóa delete như sau,

delete []A;
đã bổ sung 5.9 năm trước bởi
xuans2huy510
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)