Menu
CoddyTech

Alokasi dengan calloc()

Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 36 dari 63.

Meskipun malloc() adalah fungsi yang paling umum untuk alokasi memori dinamis, C menyediakan alternatif lain yang berguna: calloc(). Fungsi calloc(), singkatan dari "contiguous allocation", menawarkan cara praktis untuk mengalokasikan memori bagi array dengan satu manfaat tambahan yang penting.

Tidak seperti malloc() yang menerima satu argumen (total byte), calloc() menerima dua argumen: jumlah elemen yang ingin kamu alokasikan dan ukuran setiap elemen. Ini membuatnya sangat intuitif saat bekerja dengan array. Contohnya:

#include <stdlib.h>

// Alokasikan ruang untuk 5 bilangan bulat menggunakan calloc()
int *arr = (int*)calloc(5, sizeof(int));

// Ini setara dengan: malloc(5 * sizeof(int))

Keunggulan utama calloc() adalah fungsinya yang secara otomatis menginisialisasi semua memori yang dialokasikan dengan nilai nol. Saat kamu menggunakan malloc(), memori yang dialokasikan berisi nilai acak yang sebelumnya tersimpan di sana, tetapi calloc() menjamin setiap byte diatur ke nol. Artinya, semua bilangan bulat akan bernilai 0, semua bilangan float akan bernilai 0.0, dan semua pointer akan bernilai NULL.

Seperti malloc(), calloc() mengembalikan pointer ke memori yang dialokasikan atau NULL jika alokasi gagal, jadi kamu harus selalu memeriksa kegagalan alokasi dan ingat untuk free() memori tersebut setelah selesai menggunakannya.

challenge icon

Tantangan

Mudah

Tulis program C yang menunjukkan penggunaan calloc() untuk alokasi memori dinamis dengan inisialisasi otomatis ke nol. Programmu harus:

  1. Membaca bilangan bulat size dari pengguna yang menunjukkan jumlah bilangan bulat yang akan dialokasikan
  2. Menggunakan calloc() untuk mengalokasikan memori secara dinamis bagi array yang berisi size bilangan bulat
  3. Memeriksa apakah alokasi memori berhasil. Jika gagal, cetak Memory allocation failed! dan akhiri program
  4. Jika alokasi berhasil, cetak Memory allocated and initialized to zero!
  5. Mencetak semua nilai awal dalam array untuk menunjukkan bahwa nilainya nol, dengan format: Initial values: [value1] [value2] [value3] ...
  6. Membaca size nilai bilangan bulat dari pengguna dan menyimpannya dalam array yang dialokasikan
  7. Mencetak semua nilai yang diperbarui dengan format: Updated values: [value1] [value2] [value3] ...
  8. Menghitung dan mencetak jumlah semua nilai dengan format: Sum: [value]
  9. Menggunakan free() untuk membebaskan memori
  10. Mencetak Memory freed! untuk mengonfirmasi pembersihan

Ingat untuk menyertakan header <stdlib.h> agar bisa menggunakan calloc() dan free(). Tantangan ini menunjukkan keunggulan utama calloc() dibandingkan malloc(): inisialisasi otomatis semua memori yang dialokasikan menjadi nol.

Misalnya, jika inputnya adalah:

3
10 20 30

Outputmu harus berupa:

Memory allocated and initialized to zero!
Initial values: 0 0 0
Updated values: 10 20 30
Sum: 60
Memory freed!

Tantangan ini menyoroti bagaimana calloc() menyediakan keadaan awal yang jelas dan dapat diprediksi untuk array yang dialokasikan secara dinamis, sehingga menghilangkan nilai sampah tak terduga yang mungkin ditinggalkan oleh malloc().

Coba sendiri

#include <stdio.h>
#include <stdlib.h>

int main() {
    int size;
    
    // Baca ukuran array
    scanf("%d", &size);
    
    // TODO: Tulis kodemu di bawah ini
    // Gunakan calloc() untuk mengalokasikan memori bagi array
    // Periksa apakah alokasi berhasil
    // Cetak nilai awal (seharusnya nol)
    // Baca dan simpan nilai input
    // Cetak nilai yang sudah diperbarui
    // Hitung dan cetak jumlahnya
    // Bebaskan memori yang dialokasikan
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C online