Lompat ke konten Lompat ke sidebar Lompat ke footer

Perbedaan malloc() dan calloc() Bahasa C

Fungsi malloc() dan calloc() Bahasa C merupakan fungsi library yang mengalokasikan memori secara dinamis. Dinamis berarti memori dialokasikan ketika program dijalankan dari segmen heap.


Sebelum memahami lebih dalam materi tentang Perbedaan malloc() dan calloc() Bahasa C, terlebih dahulu pelajari materi tentang: Dealokasi Memori Bahasa C Tanpa Menggunakan free(), Layout Memori Bahasa C dan Penjelasannya, dan Pengurutan Struct Bahasa C Beserta Contoh Programnya.

Inisialisasi

malloc() mengalokasikan sebuah memori blok dari ukuran byte yang diberikan dan mengembalikan sebuah pointer ke bagian awal dari alokasi memori. Jika programmer mencoba untuk membaca nilai dari alokasi memori tanpa melakukan tahapan inisialisasi, maka akan didapatkan hasil tidak terdefinisi, yang biasanya berarti nilai yang dibaca akan menjadi bagian dari garbage.

calloc() mengalokasikan memori dan juga melakukan inisialisasi untuk setiap byte dalam alokasi memori ke nilai 0. Jika ingin dilakukan pembacaan nilai dari alokasi memori tanpa perlu melakukan proses inisialisasi, maka akan didapatkan nilai 0 sebagai nilai yang telah diinisialikasikan sebelumnya oleh calloc().

Baca Juga:

Parameter

malloc() mengambil sebuah argumen tunggak, yang merupakan nilai dari byte untuk dialokasikan. Tidak seperti malloc(), dalam pemanggilannya calloc() membutuhkan dua buah argumen:
  • Angka dari blok yang harus dialokasikan.
  • Ukuran untuk setiap blok dalam satuan byte.

Return Values

Setelah berhasil melakukan proses alokasi memori pada malloc() dan calloc(), maka sebuah pointer ke blok dari memori akan dikembalikan, jika tidak maka nilai NULL akan dikembalikan yang mengindikasikan nilai kesalahan.

Contoh:

#include <stdio.h>

#include <stdlib.h>


int main()

{

// Kedua nilai mengalokasikan

// angka yang sama dalam

// satuan byte, yang merupakan

// nilai jumlah dari byte yang

// dibutuhkan untuk disimpan

// dalam nilai 5 int. Memori

// yang dialokasikan oleh

// calloc akan diinisialisasi

// ke zero, tetapi nilai

// memori yang dialokasikan

// dengan malloc tidak akan

// diinisialisasi sehingga

// proses pembacaan memorinya

// akan menghasilkan nilai

// tidak terdefinisi.

int* allocated_with_malloc =

malloc(5 * sizeof(int));


int* allocated_with_calloc =

calloc(5, sizeof(int));


// Seperti yang diperhatikan,

// semua nilai diinisialisasi

// ke nilai zero.

printf("Values of allocated_with_calloc: ");


for (size_t i = 0; i < 5; ++i) 

{printf("%d ", allocated_with_calloc[i]);}


putchar('\n');


// Malloc memanggil 1 terabyte

// dari memori dinamis, yang

// tidak tersedia pada kondisi

// kali ini, dan akan

// mengakibatkan kegagalan

// proses dan mengembalikan

// nilai NULL.

int* failed_malloc = malloc(1000000000000);


if (failed_malloc == NULL

{

printf("The allocation failed, "

"the value of failed_malloc is: %p",

(void*)failed_malloc);

}


// Catatan: selalu lakukan

// pembebasan memori dinamis

// ketika program telah

// selesai dijalankan.

free(allocated_with_malloc);

free(allocated_with_calloc);

}

Output:
Values of allocated_with_calloc: 0 0 0 0 0
The allocation failed, the value of failed_malloc is: (nil)

Artikel ini telah dibaca oleh: Gerald Hugo Christano, Gladys Sanditya, Gustina Aruming Sekar Lati, Hafizh Daffa Setiawan, dan Hammida Oriza Sativa.

5 komentar untuk "Perbedaan malloc() dan calloc() Bahasa C"

  1. Apa yang dimaksud dengan alokasi memori dinamis?

    BalasHapus
    Balasan
    1. Artinya nilai memori tersebut bisa berubah-ubah ketika program sedang dijalankan.

      Hapus
    2. Dimanis juga bisa dimaknai bahwa ukurannya pada program bersifat pleksibel atau dapat dibuat sesuai dengan kebutuhan dari program, jadi bisa lebih efisien kapasitas memori.

      Hapus
  2. Apa fungsi malloc pada bahasa C?

    BalasHapus
    Balasan
    1. Fungsi malloc digunakan untuk alokasi memori dinamiss dan berguna ketika tidak diketahui jumlah memori yang dibutuhkan selama waktu kompilasi program, atau selama waktu program dijalankan.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -