Alokasi Dinamis dengan malloc()
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 32 dari 63.
Sekarang kamu akan belajar tentang malloc(), fungsi utama untuk meminta memori dari heap saat program berjalan. Fungsi malloc() merupakan singkatan dari "memory allocation" dan memungkinkan kamu mengalokasikan memori secara dinamis saat kamu membutuhkannya, alih-alih mendeklarasikan variabel berukuran tetap saat compile.
Fungsi malloc() menerima satu argumen: jumlah byte yang ingin kamu alokasikan. Fungsi ini mengembalikan pointer void ke blok memori yang dialokasikan, atau NULL jika alokasi gagal. Karena fungsi ini mengembalikan pointer void, kamu dapat menetapkannya langsung ke pointer bertipe, casting bersifat opsional dalam C (tidak seperti C++, yang mengharuskannya).
#include <stdlib.h>
int *ptr = (int*)malloc(sizeof(int)); // Alokasikan memori untuk satu bilangan bulat
// ptr sekarang menunjuk ke lokasi memori yang dapat menyimpan satu bilangan bulatKeunggulan utama
malloc()adalah fleksibilitas, kamu bisa meminta jumlah memori yang tepat sesuai kebutuhan saat program berjalan, dan memori ini tetap tersedia sampai kamu membebaskannya secara eksplisit. Ini sangat berguna ketika kamu belum tahu berapa banyak memori yang akan dibutuhkan sampai programmu berjalan.
Ingat untuk menyertakan <stdlib.h> agar bisa menggunakan malloc(). Di C, melakukan cast pada pointer void yang dikembalikan bersifat opsional karena pointer tersebut otomatis dikonversi ke tipe yang kamu tetapkan.
Tantangan
MudahTulis program C yang menunjukkan alokasi memori dinamis menggunakan malloc() untuk membuat dan menggunakan satu integer di heap. Programmu harus:
- Menggunakan
malloc()untuk mengalokasikan memori secara dinamis bagi satu integer - Mengubah pointer void yang dikembalikan menjadi pointer integer
- Membaca nilai integer dari input pengguna
- Menyimpan nilai input di memori yang dialokasikan secara dinamis menggunakan operator dereferensi
- Mencetak nilai yang disimpan dalam format:
Stored value: [value] - Menghitung dan menyimpan kuadrat nilai di lokasi memori yang sama
- Mencetak nilai kuadrat dalam format:
Squared value: [value]
Ingat untuk menyertakan header <stdlib.h> agar bisa menggunakan malloc(). Programmu harus menunjukkan alur kerja dasar alokasi memori dinamis: meminta memori dari heap, menggunakannya untuk menyimpan dan memanipulasi data, serta menggunakan memori yang dialokasikan melalui operasi pointer.
Sebagai contoh, jika pengguna memasukkan 7, outputmu seharusnya:
Stored value: 7
Squared value: 49Tantangan ini memperkenalkan konsep dasar alokasi memori dinamis, yaitu memori diminta saat program berjalan, bukan ditetapkan saat compile. Hal ini memberi programmu fleksibilitas yang lebih besar dalam penggunaan memori.
Coba sendiri
#include <stdio.h>
#include <stdlib.h>
int main() {
// Baca input
int input_value;
scanf("%d", &input_value);
// TODO: Tulis kodemu di bawah ini
// 1. Gunakan malloc() untuk mengalokasikan memori bagi satu bilangan bulat
// 2. Ubah tipe pointer yang dikembalikan menjadi int*
// 3. Simpan nilai input di memori yang dialokasikan
// 4. Cetak nilai yang disimpan
// 5. Hitung dan simpan kuadratnya di lokasi yang sama
// 6. Cetak nilai kuadratnya
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 Dasar6Manajemen Memori
Memori Stack vs. HeapAlokasi Dinamis dengan malloc()Menggunakan sizeof() untuk AlokasiMemeriksa Kegagalan AlokasiMembebaskan Memori dengan free()Alokasi dengan calloc()Ringkasan: array DinamisLatihan sendiri: Compiler C online