Menu
Coddy logo textTech

free() ile Belleği Serbest Bırakma

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 35 / 63.

malloc() kullanarak belleği dinamik olarak ayırdığınızda, siz açıkça serbest bırakana kadar bu bellek ayrılmış olarak kalır. free() işlevi, kullanmayı tamamladığınızda dinamik olarak ayrılmış belleği sisteme geri vermek için kullandığınız araçtır.

free() işlevi tek bir bağımsız değişken alır: serbest bırakmak istediğiniz bellek bloğuna işaret eden bir işaretçi. Bu, malloc() (veya calloc() gibi ilgili işlevler) 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);  // İşin bitince belleği serbest bırak

free() işlevini çağırmamak, bellek sızıntısı olarak bilinen duruma yol açar. Ayrılan bellek, artık onu kullanmıyor olsanız bile programınız tarafından rezerve edilmiş olarak kalır. Uzun süre çalışan programlarda veya belleği tekrar tekrar ayıran programlarda bu sızıntılar, kullanılabilir sistem belleğinin tamamını tüketebilir ve performans sorunlarına veya çökmelere neden olabilir.

Unutma: her malloc() çağrısının karşılık gelen bir free() çağrısı olmalıdır. Bu eşleştirme, C programlamasında sorumlu bellek yönetimi için gereklidir.

challenge icon

Görev

Kolay

Dinamik bellek ayırma ve serbest bırakmanın tamamlanmış 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ç tamsayı depolanacağını belirten bir count tamsayısı okuyun
  2. malloc() tamsayıdan oluşan bir dizi için dinamik olarak bellek ayırmak üzere sizeof() ile birlikte count kullanın
  3. Bellek ayırma işleminin 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. Ayırma başarılı olursa Memory allocated successfully! yazdırın
  5. Kullanıcıdan count adet tamsayı değeri okuyun ve bunları ayrılan diziye kaydedin
  6. Tüm değerlerin toplamını hesaplayın ve şu biçimde yazdırın: Sum: [value]
  7. En büyük değeri bulun ve şu biçimde yazdırın: Maximum: [value]
  8. Belleği serbest bırakmak için free() kullanın
  9. Temizleme işlemini doğrulamak için Memory freed successfully! yazdırın

<stdlib.h> ve malloc() kullanmak için free() başlığını eklemeyi unutmayın. Bu alıştırma, programlarınızda bellek sızıntılarını önlemek için malloc() ve free() işlevlerinin birlikte kullanılmasının gerekliliğini gösterir.

Örneğin, girdi şuysa:

4
15 8 23 12

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

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

Bu alıştırma, artık ihtiyaç duyulmayan her dinamik olarak ayrılmış bellek bloğunun uygun şekilde serbest bırakılması gerektiği yönündeki kritik kavramı pekiştirir ve C programlamada sorumlu bellek yönetimi döngüsünü tamamlar.

Kendin dene

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

int main() {
    int count;
    
    // Saklanacak tamsayıların sayısını oku
    scanf("%d", &count);
    
    // TODO: Kodunuzu aşağıya yazın
    // 1. malloc() ile sizeof() kullanarak bellek ayırın
    // 2. Ayırmanın başarılı olup olmadığını kontrol edin
    // 3. Tamsayı 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.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi