malloc() Fungsi di perpustakaan C dengan CONTOH
โก Ringkasan Cerdas
Fungsi malloc() dalam bahasa C memesan blok memori di heap pada saat runtime dan mengembalikan pointer void ke byte pertamanya, memungkinkan program untuk meminta penyimpanan yang ukurannya tidak diketahui sampai kode tersebut benar-benar dieksekusi.

Apa itu malloc di C?
Fungsi malloc() adalah singkatan dari alokasi memori. Ini adalah fungsi yang digunakan untuk mengalokasikan blok memori secara dinamis. Ini mencadangkan ruang memori dengan ukuran tertentu dan mengembalikan penunjuk nol yang menunjuk ke lokasi memori. Pointer yang dikembalikan biasanya bertipe void. Artinya kita dapat menetapkan fungsi malloc ke pointer mana pun.
Sintaksis
ptr = (cast_type *) malloc (byte_size);
Di sini,
- ptr adalah penunjuk cast_type.
- Fungsi malloc mengembalikan pointer ke memori yang dialokasikan byte_size.
Example: ptr = (int *) malloc (50)
Ketika pernyataan ini berhasil dijalankan, ruang memori sebesar 50 byte dicadangkan. Alamat byte pertama dari ruang cadangan diberikan ke penunjuk ptr bertipe int.
Perhatikan contoh lain penerapan malloc:
#include <stdlib.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); /* a block of 15 integers */ if (ptr != NULL) { *(ptr + 5) = 480; /* assign 480 to sixth integer */ printf("Value of the 6th integer is %d",*(ptr + 5)); } }
Keluaran:
Value of the 6th integer is 480
Perhatikan bahwa sizeof(*ptr) digunakan sebagai pengganti sizeof(int) agar kode lebih tangguh ketika deklarasi *ptr diubah tipenya ke tipe data yang berbeda di kemudian hari.
Alokasi mungkin gagal jika memori tidak mencukupi. Dalam hal ini, ia mengembalikan pointer NULL. Jadi, Anda harus memasukkan kode untuk memeriksa pointer NULL.
Perlu diingat bahwa memori yang dialokasikan bersifat berurutan dan dapat diperlakukan sebagai array. Kita dapat menggunakan petunjuk Gunakan aritmatika untuk mengakses elemen array daripada menggunakan tanda kurung siku [ ]. Kami menyarankan untuk menggunakan + untuk merujuk ke elemen array karena penggunaan penambahan ++ atau += mengubah alamat yang disimpan oleh pointer.
Fungsi Malloc juga dapat digunakan dengan tipe data karakter maupun tipe data kompleks seperti struktur.
Mengapa menggunakan malloc() di C?
Array statis dan variabel biasa menetapkan ukurannya saat program dikompilasi, yang membuang ruang ketika kebutuhan ternyata lebih kecil dan gagal total ketika kebutuhan ternyata lebih besar. Fungsi `malloc()` mengatasi masalah ini dengan meminta memori saat runtime, sehingga program dapat mengatur ukuran buffer sesuai dengan jumlah data yang diterimanya. Fleksibilitas runtime inilah yang menjadi inti dari alokasi memori dinamis di C
Alokasi dinamis dengan malloc() adalah pilihan yang tepat dalam beberapa situasi umum:
- Jumlah input tidak diketahui sampai program dijalankan, misalnya saat membaca file atau daftar yang diberikan pengguna.
- Diperlukan blok-blok besar yang akan menyebabkan stack yang terbatas meluap, karena malloc() mengambil memori dari heap yang jauh lebih besar.
- Data harus tetap ada meskipun fungsi yang membuatnya telah berakhir, karena memori heap akan tetap ada sampai dilepaskan secara eksplisit.
- Struktur dan array perlu bertambah besar atau berkurang ukurannya selama program berjalan.
Karena blok yang dicadangkan dikembalikan sebagai pointer, blok tersebut dapat diteruskan antar fungsi dengan mudah tanpa perlu menyalin data yang mendasarinya.
Cara Membebaskan Memori yang Dialokasikan oleh malloc()
Memori yang dialokasikan oleh malloc() berada di heap dan tidak pernah dilepaskan secara otomatis. Ketika sebuah program terus mengalokasikan tanpa membebaskan, program tersebut perlahan-lahan mengonsumsi semua memori yang tersedia, suatu cacat yang dikenal sebagai kebocoran memori. Fungsi free() mengembalikan blok yang telah selesai ke sistem sehingga ruang tersebut dapat digunakan kembali.
Fungsi free() menerima satu argumen, yaitu pointer yang dikembalikan oleh malloc(), dan melepaskan seluruh blok memori sekaligus:
int *ptr; ptr = malloc(10 * sizeof(int)); if (ptr != NULL) { /* use the allocated memory here */ free(ptr); /* release the block */ ptr = NULL; /* avoid a dangling pointer */ }
Ikuti aturan-aturan ini untuk mengelola memori dinamis dengan aman:
- Panggil fungsi free() tepat satu kali untuk setiap malloc() yang berhasil; membebaskan blok yang sama dua kali akan menyebabkan perilaku yang tidak terdefinisi.
- Setelah membebaskan memori, atur pointer ke NULL agar tidak dapat digunakan kembali sebagai pointer yang mengambang (dangling pointer).
- Jangan pernah membebaskan (free) pointer yang tidak dikembalikan oleh malloc(), termasuk pointer yang digeser oleh aritmatika pointer.
- Cocokkan setiap alokasi dengan pelepasan yang sesuai sebelum penunjuk keluar dari cakupan.
Keeping Alokasi dan pelepasan memori secara seimbang adalah disiplin inti dari manajemen memori manual dalam bahasa C, dan hal ini mencegah kebocoran memori dan kerusakan yang disebabkan oleh penggunaan kembali memori yang telah dibebaskan.
malloc() vs calloc(): Perbedaan Utama
malloc() dan panggilan() Keduanya memesan memori heap, tetapi berbeda dalam argumen dan cara mereka memperlakukan blok baru. malloc() mengambil satu argumen, jumlah total byte, dan membiarkan isinya tidak diinisialisasi, sehingga blok tersebut menyimpan nilai sampah yang tidak dapat diprediksi sampai program menulis ke dalamnya. calloc() mengambil dua argumen, jumlah elemen dan ukuran masing-masing, dan membersihkan setiap byte menjadi nol sebelum mengembalikan pointer.
Perbedaan praktisnya dapat diringkas menjadi tiga poin:
- Inisialisasi: calloc() mengosongkan memori, sedangkan malloc() tidak, yang membuat malloc() sedikit lebih cepat ketika nilai-nilai tersebut akan ditimpa anyway.
- Argumen: Anda menulis malloc(n * size) tetapi calloc(n, size) untuk memesan array yang sama.
- Kasus penggunaan: pilih calloc() ketika blok yang bersih dan berisi nol penting, dan malloc() ketika kecepatan lebih diutamakan dan inisialisasi ditangani secara manual.
Kedua fungsi tersebut dideklarasikan dalam stdlib.h, keduanya mengembalikan pointer void atau NULL jika gagal, dan keduanya mengembalikan memori dengan fungsi free() yang sama.

