Kapan calloc digunakan untuk mengalokasikan blok memori, wilayah yang dialokasikan diinisialisasi ke nol. Sebaliknya, malloc tidak menyentuh isi blok memori yang dialokasikan, yang berarti mengandung nilai-nilai sampah. Ini berpotensi menjadi risiko keamanan karena konten memori tidak dapat diprediksi dan kesalahan pemrograman dapat menyebabkan kebocoran konten ini.
calloc | malloc | |
---|---|---|
Fungsi | mengalokasikan wilayah memori yang cukup besar untuk menampung masing-masing "n elemen" dari "ukuran" byte. Juga menginisialisasi isi memori menjadi nol. | mengalokasikan "size" byte memori. |
Jumlah argumen | 2 | 1 |
Sintaksis | membatalkan * calloc (number_of_blocks, size_of_each_block_in_bytes); | void * malloc (size_in_bytes); |
Isi memori yang dialokasikan | Wilayah yang dialokasikan diinisialisasi ke nol. | Isi memori yang dialokasikan tidak diubah. yaitu, memori berisi nilai-nilai yang tidak dapat diprediksi atau sampah. Ini menghadirkan risiko. |
Nilai pengembalian | penunjuk kosong (batal *). Jika alokasi berhasil, pointer ke blok memori dikembalikan. Jika alokasi memori gagal, pointer NULL dikembalikan. | penunjuk kosong (batal *). Jika alokasi berhasil, pointer ke blok memori dikembalikan. Jika alokasi memori gagal, pointer NULL dikembalikan. |
void * malloc (size_t size);
mengalokasikan ukuran
byte memori. Jika alokasi berhasil, pointer ke memori yang dialokasikan dikembalikan. Jika tidak BATAL
dikembalikan. Contoh:
/ * Alokasikan memori untuk array dengan 15 elemen tipe int. * / int * ptr = malloc (15 * sizeof (int)); if (ptr == NULL) / * Memory tidak dapat dialokasikan, jadi cetak kesalahan dan keluar. * / fprintf (stderr, "Tidak dapat mengalokasikan memori \ n"); keluar (EXIT_FAILURE); / * Alokasi berhasil. * /
Catat itu malloc
mengharuskan kita menghitung byte memori yang kita butuhkan, dan meneruskannya sebagai argumen ke malloc.
membatalkan * calloc (size_t nelements, size_t bytes);
mengalokasikan blok memori yang berdekatan yang cukup besar untuk dipegang elemen
ukuran byte
setiap. Wilayah yang dialokasikan diinisialisasi ke nol. Dalam contoh di atas:
/ * Alokasikan ruang untuk array dengan 15 elemen tipe int dan menginisialisasi ke nol. * / int * ptr = calloc (15, sizeof (int)); if (ptr == NULL) / * Memory tidak dapat dialokasikan, jadi cetak kesalahan dan keluar. * / fprintf (stderr, "Tidak dapat mengalokasikan memori \ n"); keluar (EXIT_FAILURE); / * Alokasi berhasil. * /
calloc (m, n) sama dengan
p = malloc (m * n); jika (p) memset (p, 0, m * n);
Tutorial video ini menjelaskan fungsi alokasi memori malloc
, calloc
dan realokasi
, serta fungsi alokasi memori Gratis
:
Ini umumnya ide yang baik untuk digunakan calloc
lebih malloc
. Saat Anda menggunakan malloc, konten memori yang dialokasikan tidak dapat diprediksi. Kesalahan pemrograman dapat menyebabkan isi memori ini bocor dengan cara yang tidak disengaja tetapi sangat rentan. Contoh yang baik dari kebocoran tersebut adalah kerentanan Heartbleed di OpenSSL, mekanisme dasar yang dijelaskan dalam komik XKCD ini dan beberapa detail teknis lainnya ada di posting blog ini..
calloc sedikit lebih lambat dari malloc karena langkah ekstra menginisialisasi wilayah memori yang dialokasikan. Namun, dalam praktiknya perbedaan kecepatan sangat kecil dan dapat diabaikan.