Hàm cấp phát bộ nhớ thư viện C void *calloc(size_t nitems, size_t size) cấp phát bộ nhớ yêu cầu và trả về con trỏ tới nó.
Khác với malloc: malloc không đặt bộ nhớ về 0, calloc đặt bộ nhớ cấp phát về 0.
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 calloc()
- Dùng để cấp phát các khối bộ nhớ liên tục tại runtime.
- Được thiết kế đặc biệt cho mảng.
- Trả về con trỏ void trỏ tới địa chỉ cơ sở bộ nhớ cấp phát.
Cú pháp:
void *calloc(số phần tử, kích thước byte)
Ví dụ
int *ptr; ptr = (int*) calloc(500, 2);
Ở đây, 500 khối bộ nhớ mỗi khối 2 byte được cấp phát liên tục. Tổng bộ nhớ = 1000 byte.

int *ptr; ptr = (int*) calloc(n, sizeof(int));
Chương trình ví dụ
Chương trình C tính tổng số chẵn/lẻ dùng calloc:
#include <stdio.h>
#include <stdlib.h>
void main() {
int i, n;
int *p;
int even = 0, odd = 0;
p = (int*) calloc(n, sizeof(int));
printf("Nhập số phần tử: ");
scanf("%d", &n);
if (p == NULL) {
printf("Bộ nhớ không khả dụng");
exit(0);
}
printf("Các phần tử:\n");
for (i = 0; i < n; i++) {
scanf("%d", p + i);
}
for (i = 0; i < n; i++) {
if (*(p + i) % 2 == 0)
even += *(p + i);
else
odd += *(p + i);
}
printf("Tổng số chẵn: %d\n", even);
printf("Tổng số lẻ: %d\n", odd);
}
Kết quả
Nhập số phần tử: 4 Các phần tử: 12 56 23 10 Tổng số chẵn: 78 Tổng số lẻ: 23