free()
Membebaskan memori yang Dialokasikan dalam C
Fungsi free()
digunakan untuk membebaskan memori yang telah dialokasikan secara dinamis menggunakan malloc()
, calloc()
, atau realloc()
.
Mengapa free() penting?
Jika kita tidak menggunakan free()
, maka memori yang dialokasikan akan tetap terpakai meskipun tidak digunakan lagi. Ini bisa menyebabkan memory leak, yaitu kondisi di mana memori terpakai terus-menerus tanpa dilepaskan.
Sintaks
ptr
➜ Pointer ke blok memori yang dialokasikan sebelumnya.Setelah
free()
, pointer tetap ada tetapi tidak menunjuk ke memori yang valid (dangling pointer).Jika
ptr == NULL
, makafree(ptr)
tidak melakukan apa-apa (aman untuk dipanggil).
Contoh Pengunaan
1. Membebaskan memori setelah menggunakan malloc()
Hasilnya:
malloc(sizeof(int))
➜ Mengalokasikan memori untuk satu integer.Menggunakan memori (
*ptr = 42
).Memanggil
free(ptr)
➜ Membebaskan memori yang dialokasikan.Mengatur
ptr = NULL
➜ Untuk mencegah dangling pointer.
2. Membebaskan memori untuk array dinamis
Hasilnya:
Alokasi memori untuk array (
malloc(n * sizeof(int))
).Mengisi dan menampilkan isi array.
Memanggil
free(arr)
untuk membebaskan memori.Mengatur
arr = NULL
untuk mencegah dangling pointer.
3. Memori yang sudah dibebaskan tidak bisa digunakan lagi
Hasilnya:
Setelah
free(ptr)
,ptr
masih menunjuk ke lokasi lama, tetapi memori tersebut sudah dilepaskan.Membaca
*ptr
setelahfree()
menyebabkan "Undefined Behavior".Solusi: Set
ptr = NULL
setelahfree(ptr)
.
4. Penanganan double free (membebaskan memori dua kali)
Double
free(ptr)
bisa menyebabkan crash atau behavior tidak terduga.Solusi: Set
ptr = NULL
setelahfree(ptr)
, sehingga pemanggilanfree(ptr)
berikutnya menjadi aman.
5. Aman Memanggil free(NULL)
Jika pointer adalah NULL, maka free(ptr)
tidak melakukan apa-apa (aman dipanggil).
Kenapa free(NULL) aman?
Standar C memastikan bahwa free(NULL)
tidak akan menyebabkan error atau crash.
Last updated