Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Tulis program C yang menunjukkan penanganan error yang tepat saat menggunakan malloc() untuk alokasi memori dinamis. Programmu harus:

  1. Membaca bilangan bulat n dari pengguna sebagai jumlah bilangan bulat yang akan disimpan
  2. Menggunakan malloc() dengan sizeof() untuk mengalokasikan memori secara dinamis bagi array yang berisi n bilangan bulat
  3. Memeriksa apakah alokasi memori berhasil dengan menguji apakah pointer yang dikembalikan bernilai NULL
  4. Jika alokasi gagal, mencetak Memory allocation failed! lalu mengakhiri program
  5. Jika alokasi berhasil, mencetak Memory allocation successful!
  6. Membaca n nilai bilangan bulat dari pengguna dan menyimpannya dalam array yang telah dialokasikan
  7. Menghitung dan mencetak jumlah semua nilai dengan format: Sum: [value]
  8. 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 40

Outputmu seharusnya:

Memory allocation successful!
Sum: 100
Bytes allocated: 16

Tantangan 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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C online