fbpx

Struktur Data : Alokasi Memori Dinamis – malloc() dan calloc()

๐Ÿ“‹ Daftar Isi

malloc()

โ€œmallocโ€ atau โ€œmemory allocationโ€ digunakan untuk mengalokasikan satu blok memory dengan ukuran tertentu secara dinamis. Mengembalikan void* (pointer bertipe void), perlu dikonversikan sesuai dengan data yang akan disimpan dalam blok memory tersebut.

ptr = (tipe_data_konversi*) malloc(jumlah_byte)

Contoh:

int *ptr = (*int) malloc(100 * sizeof(int));

(ukuran dari int adalah 4 byte, fungsi malloc di sini akan mengalokasikan memori 400 bytes, dan pointer ptr akan menyimpan alamat byte pertama dari memori yang dialokasikan)

Penggunaan malloc()

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

int main()
{
    int i, n;
    printf("Enter number of elements : ");
    scanf("%d", &n);
    int *ptr = (*int) malloc(n * sizeof(int));

    if (arr == NULL)
    {
        printf("Memory not allocated.\n");
        exiit(0);
    }
    else 
    {
        printf("Memory successfully allocated using malloc.\n");
        for (i = 0; i < n; ++i)
        {
            arr[i] = i + 1;
        }
        printf("The elements of the array are : ");
        for (i = 0; i < n; ++1)
            printf("%d, ", arr[i]);
    }
    return 0;
}

Output

Enter number of elements: 5
Memory successfully allocated using malloc.
The elements of the array are: 1, 2, 3, 4, 5,


calloc()

calloc atau โ€œcontiguous allocationโ€ digunakan untuk alokasi memory dinamis seperti malloc. Sama seperti malloc, calloc juga return pointer bertipe void (void*). Jika berhasil/sukses, calloc()akan return sebuah pointer bertipe void yang dapat dikonversi ke pointer dengan tipe lain dan blok memory yang telah dialokasikan akan terinisialisasi dengan nilai 0 (nol). Jika gagal, fungsi akan return sebuah pointer NULL. Deklarasi

ptr = (tipe_data_konversi*) calloc(jumlah_blok, ukuran_masing2_blok)

Contoh

int *arr = (int *)calloc(5, sizeof(int));

calloc() akan mengalokasikan 5 blok integer dan menginisialisasi masing-masing blok dengan nilai 0.


Perbedaan malloc() dan calloc()

.tg {border-collapse:collapse;border-spacing:0;} .tg td{border-bottom-width:1px;border-color:black;border-style:solid;border-top-width:1px;border-width:0px; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{border-bottom-width:1px;border-color:black;border-style:solid;border-top-width:1px;border-width:0px; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-sh4c{text-align:center;vertical-align:top} .tg .tg-baqh{text-align:center;vertical-align:top} .tg .tg-amwm{font-weight:bold;text-align:center;vertical-align:top}
malloc() calloc()
1 parameter = ukuran 2 parameter = jumlah blok dan ukuran masing-masing blok
Isi/nilai dari blok memory yang dialokasikan belum terinisialisasi (belum ada nilainya) Masing-masing blok memory telah terinisiasi dengan 0 (nol)
malloc lebih cepat dibanding calloc() (tentu saja karena selain mengalokasikan, calloc juga menginisialisasi nilai 0 ke setiap blok)
Mengapa calloc?
untuk menghindari buffter overflow (ketika kita alokasi memory, bisa saja alokasi memory kita sukses, tetapi sebenarnya memory fisik tidak cukup, seperti pada linux yang menerapkan Optimistic Memory Allocation), sehingga dengan kita inisialisasi 0 maka memastikan bahwa memory benar-benar telah tersedia.
Buffter overflow bisa menyebabkan crash program, karena ketika kita mau mengisi blok memory, jika tidak cukup, maka akan disimpan di memory yang berdekatan (meluap), bisa saja sedang dipakai program lain.

Materi Lengkap

Silakan baca juga beberapa artikel menarik kami tentang Struktur dan Pointer, daftar lengkapnya adalah sebagai berikut.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!