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()

Fungsi
Deskripsi

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, sedangkan calloc() selalu menginisialisasi memori dengan nol.

Last updated