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.
Tantangan
MudahTulis program C yang menunjukkan penggunaan calloc() untuk alokasi memori dinamis dengan inisialisasi otomatis ke nol. Programmu harus:
- Membaca bilangan bulat
sizedari pengguna yang menunjukkan jumlah bilangan bulat yang akan dialokasikan - Menggunakan
calloc()untuk mengalokasikan memori secara dinamis bagi array yang berisisizebilangan bulat - Memeriksa apakah alokasi memori berhasil. Jika gagal, cetak
Memory allocation failed!dan akhiri program - Jika alokasi berhasil, cetak
Memory allocated and initialized to zero! - Mencetak semua nilai awal dalam array untuk menunjukkan bahwa nilainya nol, dengan format:
Initial values: [value1] [value2] [value3] ... - Membaca
sizenilai bilangan bulat dari pengguna dan menyimpannya dalam array yang dialokasikan - Mencetak semua nilai yang diperbarui dengan format:
Updated values: [value1] [value2] [value3] ... - Menghitung dan mencetak jumlah semua nilai dengan format:
Sum: [value] - Menggunakan
free()untuk membebaskan memori - 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 30Outputmu 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;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Dasar-Dasar Pointer
Apa Itu Pointer?Mendeklarasikan PointerOperator Address-Of (&)Operator Dereference (*)Pointer NULLRekap: Dasar-Dasar Pointer4Proyek: Utilitas Teks Sederhana
Gambaran Umum ProyekMenghitung Karakter2Pointer dan array
Nama array sebagai pointerElemen array dan pointerAritmetika pointerMembandingkan pointerRangkuman: Menelusuri array dengan pointer5Pointer dan Fungsi
Penerusan dengan NilaiMeneruskan Pointer ke FungsiMengubah Variabel melalui PointerContoh Klasik: SwapMeneruskan Array ke FungsiRingkasan: Argumen Pointer Fungsi8Struct dan Pointer
Pointer ke StructOperator Panah (->)Mengirim Struct berdasarkan NilaiMengirim Pointer StructAlokasi Dinamis StructUlasan: Memodifikasi Struct dengan Pointer11Tantangan Rangkuman Akhir
Rangkuman: Penggabungan string DinamisRangkuman: array berisi structRangkuman: Penghitung Frekuensi Kata3Array char dan String
String sebagai array charPenanda akhir nullInput String dengan scanfMenggunakan strlen()Menggunakan strcpy()Menggunakan strcat()Menggunakan strcmp()Ulasan: Fungsi String DasarLatihan sendiri: Compiler C online