Menu
Coddy logo textTech

Dinamik Bellek Ayırma - malloc()

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

Şimdi, program yürütme sırasında yığından (heap) bellek istemek için kullanılan birincil işlev olan malloc() hakkında bilgi edineceksiniz. malloc() işlevi "bellek tahsisi" (memory allocation) anlamına gelir ve derleme zamanında sabit boyutlu değişkenler bildirmek yerine, ihtiyacınız olduğunda belleği dinamik olarak tahsis etmenize olanak tanır.

malloc() fonksiyonu tek bir argüman alır: tahsis etmek istediğiniz bayt sayısı. Tahsis edilen bellek bloğuna bir void işaretçisi döndürür veya tahsis işlemi başarısız olursa NULL döndürür. Bir void işaretçisi döndürdüğü için, onu uygun veri türüne dönüştürmelisiniz.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Bir tam sayı için bellek ayır
// ptr artık bir tam sayı tutabilen bir bellek konumunu işaret ediyor

malloc() fonksiyonunun temel avantajı esnekliktir - çalışma zamanında tam olarak ihtiyacınız olan bellek miktarını talep edebilirsiniz ve bu bellek, siz onu açıkça serbest bırakana kadar kullanılabilir kalır. Bu, programınız çalışana kadar ne kadar belleğe ihtiyacınız olacağını bilmediğiniz durumlarda özellikle yararlıdır.

malloc() kullanmak için <stdlib.h> kütüphanesini dahil etmeyi unutmayın ve döndürülen void işaretçisini her zaman üzerinde çalıştığınız veri türüyle eşleşecek şekilde dönüştürün (cast edin).

challenge icon

Görev

Kolay

Heap üzerinde tek bir tam sayı oluşturmak ve onunla çalışmak için malloc() kullanarak dinamik bellek tahsisini gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. Bir tam sayı için dinamik olarak bellek tahsis etmek üzere malloc() kullanın
  2. Döndürülen void işaretçisini (pointer) bir tam sayı işaretçisine dönüştürün (cast)
  3. Kullanıcı girişinden bir tam sayı değeri okuyun
  4. Giriş değerini, dereference operatörünü kullanarak dinamik olarak tahsis edilen bellekte saklayın
  5. Saklanan değeri şu formatta yazdırın: Stored value: [value]
  6. Değerin karesini hesaplayın ve aynı bellek konumunda saklayın
  7. Kare alınmış değeri şu formatta yazdırın: Squared value: [value]

malloc() kullanmak için <stdlib.h> başlık dosyasını eklemeyi unutmayın. Programınız dinamik bellek tahsisinin temel iş akışını göstermelidir: heap'ten bellek talep etmek, verileri saklamak ve işlemek için kullanmak ve tahsis edilen bellekle işaretçi işlemleri aracılığıyla çalışmak.

Örneğin, kullanıcı 7 girerse, çıktınız şöyle olmalıdır:

Stored value: 7
Squared value: 49

Bu zorluk sizi, belleğin derleme zamanında sabitlenmek yerine çalışma zamanında talep edildiği ve programlarınıza bellek kullanımında daha fazla esneklik sağlayan dinamik bellek tahsisi temel kavramıyla tanıştırır.

Kopya kağıdı

malloc() fonksiyonu, program yürütme sırasında yığından (heap) dinamik olarak bellek ayırır. Ayrılacak bayt sayısını alır ve ayrılan bellek bloğuna bir void işaretçisi döndürür veya ayırma başarısız olursa NULL döndürür.

malloc() kullanmak için <stdlib.h> kütüphanesini dahil edin:

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Bir tam sayı için bellek ayır

Önemli noktalar:

  • Döndürülen void işaretçisini her zaman uygun veri türüne dönüştürün
  • Bellek, açıkça serbest bırakılana kadar kullanılabilir kalır
  • Çalışma zamanında tam bellek miktarlarını talep etme esnekliği sağlar
  • Gereken doğru bayt sayısını belirlemek için sizeof() kullanın

Kendin dene

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

int main() {
    // Girdiyi oku
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Kodunuzu aşağıya yazın
    // 1. Bir tam sayı için bellek ayırmak üzere malloc() kullanın
    // 2. Döndürülen işaretçiyi int* türüne dönüştürün (cast)
    // 3. Girdi değerini ayrılan bellekte saklayın
    // 4. Saklanan değeri yazdırın
    // 5. Aynı konumda karesini hesaplayın ve saklayın
    // 6. Karesi alınmış değeri yazdırı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