Menu
Coddy logo textTech

free() ile Belleği Serbest Bırakma

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 35 / 63.

malloc() kullanarak belleği dinamik olarak tahsis ettiğinizde, siz onu açıkça serbest bırakana kadar bu bellek tahsis edilmiş olarak kalır. free() fonksiyonu, kullanımınız bittiğinde dinamik olarak tahsis edilmiş belleği sisteme geri döndürmek için aracınızdır.

free() fonksiyonu bir argüman alır: serbest bırakmak istediğiniz bellek bloğuna bir işaretçi (pointer). Bu, malloc() (veya calloc() gibi ilgili fonksiyonlar) tarafından döndürülen işaretçinin aynısı olmalıdır.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Bellek ayır
*ptr = 42;  // Belleği kullan
free(ptr);  // İşlem bittiğinde belleği serbest bırak

free() fonksiyonunu çağırmamak, bellek sızıntısı (memory leak) olarak bilinen durumu oluşturur. Ayrılan bellek, artık kullanmıyor olsanız bile programınız tarafından rezerve edilmiş olarak kalır. Uzun süre çalışan programlarda veya tekrar tekrar bellek ayıran programlarda, bu sızıntılar tüm kullanılabilir sistem belleğini tüketebilir ve performans sorunlarına veya çökmelere neden olabilir.

Unutmayın: her malloc() fonksiyonunun karşılık gelen bir free() fonksiyonu olmalıdır. Bu eşleştirme, C programlamada sorumlu bellek yönetimi için esastır.

challenge icon

Görev

Kolay

Dinamik bellek tahsisi ve serbest bırakılmasının tam yaşam döngüsünü gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. Kullanıcıdan kaç adet tam sayı saklanacağını temsil eden bir count tam sayısı okuyun
  2. count adet tam sayıdan oluşan bir dizi için dinamik olarak bellek tahsis etmek üzere sizeof() ile birlikte malloc() kullanın
  3. Bellek tahsisinin başarılı olup olmadığını kontrol edin - başarısız olursa, Memory allocation failed! yazdırın ve programı sonlandırın
  4. Tahsis başarılı olursa, Memory allocated successfully! yazdırın
  5. Kullanıcıdan count adet tam sayı değeri okuyun ve bunları tahsis edilen dizide saklayın
  6. Tüm değerlerin toplamını şu formatta hesaplayın ve yazdırın: Sum: [value]
  7. En büyük değeri şu formatta bulun ve yazdırın: Maximum: [value]
  8. Belleği serbest bırakmak için free() kullanın
  9. Temizliği onaylamak için Memory freed successfully! yazdırın

malloc() ve free() fonksiyonlarını kullanmak için <stdlib.h> başlık dosyasını dahil etmeyi unutmayın. Bu meydan okuma, programlarınızda bellek sızıntılarını önlemek için malloc() ve free() fonksiyonlarının temel eşleşmesini göstermektedir.

Örneğin, giriş şu şekildeyse:

4
15 8 23 12

Çıktınız şu şekilde olmalıdır:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Bu meydan okuma, dinamik olarak tahsis edilen her bellek bloğunun artık ihtiyaç duyulmadığında uygun şekilde serbest bırakılması gerektiği şeklindeki kritik kavramı pekiştirerek, C programlamada sorumlu bellek yönetimi döngüsünü tamamlar.

Kopya kağıdı

malloc() ile ayrılan belleği serbest bırakmak için free() kullanın:

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Bellek ayır
*ptr = 42;  // Belleği kullan
free(ptr);  // İşlem bittiğinde belleği serbest bırak

Bellek sızıntılarını önlemek için her malloc()'un karşılık gelen bir free()'si olmalıdır. free()'ye geçirilen işaretçi, malloc() tarafından döndürülen işaretçi ile aynı olmalıdır.

Kendin dene

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    
    // Saklanacak tam sayı adedini oku
    scanf("%d", &count);
    
    // YAPILACAK: Kodunuzu aşağıya yazın
    // 1. sizeof() ile malloc() kullanarak bellek ayırın
    // 2. Bellek ayırma işleminin başarılı olup olmadığını kontrol edin
    // 3. Tam sayı değerlerini okuyun ve saklayın
    // 4. Toplamı hesaplayın ve maksimumu bulun
    // 5. Ayrılan belleği serbest bırakın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler