CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
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ı

Soru
int *p = malloc(sizeof(int));
*p = 50;
____(p);
Cevap
int *p = malloc(sizeof(int));
*p = 50;
free(p);

Açıklama: free(p) ile heap belleği bırakılır.

Başlangıç bölümündeki tüm dersler