Hàm cấp phát bộ nhớ thư viện C void *malloc(size_t size) cấp phát bộ nhớ yêu cầu và trả về con trỏ tới nó.
Các hàm cấp phát bộ nhớ
Bộ nhớ cấp phát 2 cách:

Cấp phát tại compile time không thể thay đổi khi chạy. Vấn đề thiếu hoặc lãng phí bộ nhớ.
Giải pháp: cấp phát động theo yêu cầu khi chạy.
Hàm thư viện chuẩn cho quản lý bộ nhớ động:
- malloc()
- calloc()
- realloc()
- free()
Hàm malloc()
Dùng để cấp phát khối bộ nhớ tính bằng byte tại runtime. Trả về con trỏ void trỏ tới địa chỉ cơ sở bộ nhớ cấp phát.
Cú pháp:
void *malloc(kích thước byte)
Ví dụ 1
int *ptr; ptr = (int*) malloc(1000); int *ptr; ptr = (int*) malloc(n * sizeof(int));
Lưu ý: Trả về NULL nếu bộ nhớ không đủ.
Chương trình ví dụ
Chương trình C minh họa malloc():
#include <stdio.h>
#include <stdlib.h>
void main() {
int numofele, i;
int *p;
printf("Nhập số phần tử mảng: ");
scanf("%d", &numofele);
p = (int*) malloc(numofele * sizeof(int));
for (i = 0; i < numofele; i++) {
p[i] = i + 1;
printf("Phần tử %d của mảng: %d\n", i, p[i]);
}
}
Kết quả
Nhập số phần tử mảng: 4 Phần tử 0: 1 Phần tử 1: 2 Phần tử 2: 3 Phần tử 3: 4
Ví dụ 2
Chương trình C hiển thị phần tử dùng malloc, 5 khối đầu rỗng, 5 khối sau có logic:
#include <stdio.h>
#include <stdlib.h>
void main() {
int numofe, i, sum = 0;
int *p;
printf("Nhập số phần tử: ");
scanf("%d", &numofe);
p = (int*) malloc(numofe * sizeof(int));
if (p == NULL) {
printf("Bộ nhớ không khả dụng");
exit(0);
}
printf("Nhập các phần tử:\n");
for (i = 0; i < numofe; i++) {
scanf("%d", p + i);
sum += *(p + i);
}
printf("\nTổng các phần tử: %d", sum);
free(p); // Giải phóng 2 vị trí bộ nhớ đầu
printf("\nHiển thị vị trí bộ nhớ đã xóa:\n");
for (i = 0; i < numofe; i++) {
printf("%d\n", p[i]); // Giá trị rác
}
}
Kết quả
Nhập số phần tử: 5 Nhập phần tử: 12 10 24 45 67 Tổng các phần tử: 158 Hiển thị vị trí bộ nhớ đã xóa: 7804032 0 7799120 0 67