calloc()
Mengalokasikan memori secara dinamis dan mengisinya dengan nol dalam C
Fungsi calloc()
digunakan untuk mengalokasikan blok memori secara dinamis, mirip dengan malloc()
, tetapi secara otomatis menginisialisasi semua byte dengan nol (0
).
Sintaks
void *calloc(size_t num, size_t size);
num
➜ Jumlah elemen yang ingin dialokasikan.size
➜ Ukuran (dalam byte) dari setiap elemen.Mengembalikan pointer ke blok memori yang dialokasikan.
Jika gagal, mengembalikan
NULL
.
Contoh Penggunaan
1. Mengalokasikan memori untuk array integer
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n = 5;
// Alokasi memori untuk array dengan 5 elemen, masing-masing sebesar sizeof(int)
arr = (int*) calloc(n, sizeof(int));
if (arr == NULL) {
printf("Alokasi memori gagal!\n");
return 1;
}
// Menampilkan isi array setelah calloc()
printf("Isi array setelah calloc(): ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // Semua elemen bernilai 0
}
printf("\n");
free(arr); // Membebaskan memori
return 0;
}
Hasilnya:
Isi array setelah calloc(): 0 0 0 0 0
calloc(n, sizeof(int))
➜ Mengalokasikan 5 x 4 byte = 20 byte untuk array integer.Setiap elemen otomatis diisi dengan nol (
0
).free(arr)
➜ Membebaskan memori setelah digunakan.
2. Mengalokasikan memori untuk string
#include <stdio.h>
#include <stdlib.h>
int main() {
char *str;
// Alokasi memori untuk string 20 karakter
str = (char*) calloc(20, sizeof(char));
if (str == NULL) {
printf("Alokasi memori gagal!\n");
return 1;
}
printf("Isi string setelah calloc(): \"%s\"\n", str); // Harus kosong karena berisi '\0'
// Menyalin string ke memori yang dialokasikan
sprintf(str, "Hello calloc!");
printf("Setelah diisi: \"%s\"\n", str);
free(str); // Bebaskan memori
return 0;
}
Hasilnya:
Isi string setelah calloc(): ""
Setelah diisi: "Hello calloc!"
calloc(20, sizeof(char))
➜ Mengalokasikan 20 byte dan mengisinya dengan\0
(karakter kosong).Sebelum diisi, string kosong karena
calloc()
menginisialisasi dengan nol (\0
).Setelah menyalin string, bisa digunakan seperti biasa.
Perbandingan calloc() vs malloc()
malloc()
Mengalokasikan blok memori tanpa menginisialisasi isinya.
calloc()
Mengalokasikan memori dan mengisinya dengan nol (0
).
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr1, *ptr2;
int n = 5;
ptr1 = (int*) malloc(n * sizeof(int));
ptr2 = (int*) calloc(n, sizeof(int));
printf("Isi memori malloc(): ");
for (int i = 0; i < n; i++) {
printf("%d ", ptr1[i]); // Bisa berisi sampah (garbage value)
}
printf("\n");
printf("Isi memori calloc(): ");
for (int i = 0; i < n; i++) {
printf("%d ", ptr2[i]); // Semua elemen 0
}
printf("\n");
free(ptr1);
free(ptr2);
return 0;
}
Hasilnya:
Isi memori malloc(): 32 0 176 240 72
Isi memori calloc(): 0 0 0 0 0
malloc()
bisa mengandung nilai acak, sedangkancalloc()
selalu menginisialisasi memori dengan nol.
Last updated