Memeriksa Kegagalan Alokasi
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 34 dari 63.
Meskipun malloc() adalah alat yang ampuh untuk alokasi memori dinamis, ada kenyataan penting yang harus kamu pahami: malloc() bisa gagal. Saat sistem kehabisan memori yang tersedia, malloc() tidak dapat memenuhi permintaanmu dan mengembalikan NULL, bukan alamat memori yang valid.
Artinya, setiap kali kamu menggunakan malloc(), kamu harus memeriksa apakah pemanggilan tersebut berhasil sebelum mencoba menggunakan pointer yang dikembalikan. Menggunakan pointer NULL akan menyebabkan programmu crash dengan segmentation fault.
int *ptr = (int*)malloc(sizeof(int));
if (ptr == NULL) {
printf("Memory allocation failed!\n");
return -1; // Hentikan programmu atau tangani error
}
// Kamu bisa menggunakan ptr dengan aman di sini
*ptr = 42;Pemeriksaan NULL ini bukan pilihan, pemeriksaan ini penting untuk menulis program C yang tangguh. Meskipun kegagalan alokasi memori jarang terjadi pada sistem modern, hal itu tetap bisa terjadi, terutama di lingkungan dengan sumber daya terbatas atau saat meminta memori dalam jumlah besar. Kode C profesional selalu menyertakan pemeriksaan ini untuk mencegah crash dan menangani error dengan baik.
Tantangan
MudahTulis program C yang menunjukkan penanganan error yang tepat saat menggunakan malloc() untuk alokasi memori dinamis. Programmu harus:
- Membaca bilangan bulat
ndari pengguna sebagai jumlah bilangan bulat yang akan disimpan - Menggunakan
malloc()dengansizeof()untuk mengalokasikan memori secara dinamis bagi array yang berisinbilangan bulat - Memeriksa apakah alokasi memori berhasil dengan menguji apakah pointer yang dikembalikan bernilai
NULL - Jika alokasi gagal, mencetak
Memory allocation failed!lalu mengakhiri program - Jika alokasi berhasil, mencetak
Memory allocation successful! - Membaca
nnilai bilangan bulat dari pengguna dan menyimpannya dalam array yang telah dialokasikan - Menghitung dan mencetak jumlah semua nilai dengan format:
Sum: [value] - Mencetak total byte yang dialokasikan dengan format:
Bytes allocated: [value]
Ingat untuk menyertakan header <stdlib.h> agar dapat menggunakan malloc(). Programmu harus menunjukkan praktik penting, yaitu memeriksa kegagalan alokasi sebelum mencoba menggunakan memori yang telah dialokasikan.
Misalnya, jika inputnya adalah:
4
10 20 30 40Outputmu seharusnya:
Memory allocation successful!
Sum: 100
Bytes allocated: 16Tantangan ini menekankan pentingnya pemrograman defensif saat bekerja dengan alokasi memori dinamis, agar programmu menangani kemungkinan kegagalan alokasi memori dengan baik, bukan tiba-tiba mengalami crash.
Coba sendiri
#include <stdio.h>
#include <stdlib.h>
int main() {
// Baca jumlah bilangan bulat
int n;
scanf("%d", &n);
// TODO: Tulis kodemu di sini
// - Gunakan malloc() untuk mengalokasikan memori bagi n bilangan bulat
// - Periksa apakah alokasi berhasil
// - Tangani kondisi saat alokasi berhasil maupun gagal
// - Baca bilangan bulat tersebut dan simpan
// - Hitung jumlahnya dan banyaknya byte yang dialokasikan
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