Membebaskan Memori dengan free()
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 35 dari 63.
Saat kamu mengalokasikan memori secara dinamis menggunakan malloc(), memori tersebut tetap dialokasikan sampai kamu melepaskannya secara eksplisit. Fungsi free() adalah alat yang kamu gunakan untuk mengembalikan memori yang dialokasikan secara dinamis ke sistem setelah selesai menggunakannya.
Fungsi free() menerima satu argumen: pointer ke blok memori yang ingin kamu bebaskan. Pointer ini harus sama dengan pointer yang dikembalikan oleh malloc() (atau fungsi terkait seperti calloc()).
#include <stdlib.h>
int *ptr = (int*)malloc(sizeof(int)); // Alokasikan memori
*ptr = 42; // Gunakan memori tersebut
free(ptr); // Bebaskan memori setelah selesaiTidak memanggil free() menyebabkan apa yang dikenal sebagai kebocoran memori. Memori yang dialokasikan tetap dicadangkan oleh programmu meskipun kamu sudah tidak menggunakannya. Dalam program yang berjalan lama atau program yang berulang kali mengalokasikan memori, kebocoran ini dapat menghabiskan seluruh memori sistem yang tersedia dan menyebabkan masalah kinerja atau program mogok.
Ingat: setiap malloc() harus memiliki free() yang sesuai. Pasangan ini penting untuk pengelolaan memori yang bertanggung jawab dalam pemrograman C.
Tantangan
MudahTulis program C yang menunjukkan seluruh siklus alokasi dan pembebasan memori dinamis. Programmu harus:
- Membaca bilangan bulat
countdari pengguna yang menunjukkan banyaknya bilangan bulat yang akan disimpan - Menggunakan
malloc()dengansizeof()untuk mengalokasikan memori secara dinamis bagi array yang terdiri daricountbilangan bulat - Memeriksa apakah alokasi memori berhasil. Jika gagal, cetak
Memory allocation failed!dan hentikan program - Jika alokasi berhasil, cetak
Memory allocated successfully! - Membaca
countnilai bilangan bulat dari pengguna dan menyimpannya dalam array yang dialokasikan - Menghitung dan mencetak jumlah semua nilai dengan format:
Sum: [value] - Mencari dan mencetak nilai maksimum dengan format:
Maximum: [value] - Menggunakan
free()untuk membebaskan memori - Mencetak
Memory freed successfully!untuk memastikan pembersihan selesai
Ingat untuk menyertakan header <stdlib.h> agar dapat menggunakan malloc() dan free(). Tantangan ini menunjukkan penggunaan berpasangan malloc() dan free() yang penting untuk mencegah kebocoran memori dalam programmu.
Misalnya, jika inputnya adalah:
4
15 8 23 12Outputmu seharusnya:
Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!Tantangan ini memperkuat konsep penting bahwa setiap blok memori yang dialokasikan secara dinamis harus dibebaskan dengan benar saat tidak lagi diperlukan, sehingga siklus pengelolaan memori yang bertanggung jawab dalam pemrograman C selesai.
Coba sendiri
#include <stdio.h>
#include <stdlib.h>
int main() {
int count;
// Baca jumlah bilangan bulat yang akan disimpan
scanf("%d", &count);
// TODO: Tulis kodemu di bawah ini
// 1. Alokasikan memori menggunakan malloc() dengan sizeof()
// 2. Periksa apakah alokasi berhasil
// 3. Baca nilai bilangan bulat dan simpan
// 4. Hitung jumlah dan cari nilai maksimum
// 5. Bebaskan memori 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