free
- C kursu
- Başlangıç
- Ders 103/116
- 5 dk
free ile ayrılan belleği serbest bırakmayı öğrenirsin.
free: heap belleği bırakma
malloc ile ayrılan bellek free ile serbest bırakılmalıdır. Aksi halde bellek sızıntısı (memory leak) oluşur.
int *p = malloc(sizeof(int));
*p = 50;
printf("%d\n", *p);
free(p); /* belleği geri ver */Burada free(p) çağrısı, heap'teki alanı işletim sistemine iade eder. p'nin kendisi hâlâ geçerli bir işaretçidir; ama gösterdiği yer artık senin değildir. free'den sonra o işaretçiyi kullanmak use after free hatasıdır.
Bellek sızıntısından kaçınma
Her malloc için mutlaka bir free olmalıdır. Program boyunca ayrılan ve bırakılmayan bellek, sızıntıdır.
for (int i = 0; i < 100; i++) {
int *p = malloc(sizeof(int));
/* kullan */
free(p); /* her döngüde bırak */
}Burada her döngü adedinde bir malloc ve bir free var; bu denge sızıntıyı önler. Uzun ömürlü programlarda sızıntılar birikir ve sonunda bellek tükenir. Bu yüzden free'i unutmamak çok önemlidir.
Uygulama malloc, kullan, free
malloc ile bir int ayır; *p = 50 ata; printf ile yazdır; son olarak free ile belleği serbest bırak. <stdlib.h> başlığını ekle.
Başlangıç kodu
#include <stdio.h>
#include <stdlib.h>
int main(void) {
/* malloc ile int ayır; *p = 50; printf ile yazdır; free ile bırak */
return 0;
}Örnek çözüm
int *p = malloc(sizeof(int));
*p = 50;
printf("%d\n", *p);
free(p);Beklenen çıktı
50
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 free fonksiyonunun görevi nedir?
- Bellek ayırmak
- Belleği yeniden boyutlandırmak
- İşaretçiyi sıfırlamak
- Ayrılan belleği serbest bırakmak Doğru cevap
Açıklama: free malloc ile ayrılan belleği geri verir.
2 Fonksiyon ve görev eşleştir
| Kavram | Anlamı |
|---|---|
malloc |
Bellek ayırır |
free |
Belleği bırakır |
sizeof |
Bayt boyutu verir |
use after free |
Hata durumu |
3 Boşluğu doldur: free çağrısı
int *p = malloc(sizeof(int));
*p = 50;
____(p);
int *p = malloc(sizeof(int));
*p = 50;
free(p);
Açıklama: free(p) ile heap belleği bırakılır.