Menu
Coddy logo textTech

Dinamik Bellek Ayırma - malloc()

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

Şimdi, program yürütülürken yığından bellek istemek için kullanılan temel işlev olan malloc() hakkında bilgi edineceksin. malloc() işlevinin adı "memory allocation" ifadesinin kısaltmasıdır ve derleme zamanında sabit boyutlu değişkenler tanımlamak yerine, ihtiyaç duyduğunda dinamik olarak bellek ayırmana olanak tanır.

malloc() işlevi tek bir bağımsız değişken alır: ayırmak istediğiniz bayt sayısı. 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. Bir void işaretçisi döndürdüğü için, onu doğrudan türü belirtilmiş bir işaretçiye atayabilirsiniz; C'de tür dönüştürme isteğe bağlıdır (bunu gerektiren C++'ın aksine).

#include <stdlib.h>

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

malloc() işlevinin temel avantajı esnekliktir: çalışma zamanında tam olarak ihtiyacınız olan bellek miktarını isteyebilirsiniz ve bu bellek, siz onu açıkça serbest bırakana kadar kullanılabilir durumda kalır. Bu, özellikle programınız çalışana kadar ne kadar belleğe ihtiyaç duyacağınızı bilmiyorsanız oldukça kullanışlıdır.

malloc() kullanmak için <stdlib.h> eklemeyi unutma; döndürülen void işaretçisini dönüştürmek C'de isteğe bağlıdır, çünkü işaretçi atadığın türe otomatik olarak dönüştürülür.

challenge icon

Görev

Kolay

Yığında tek bir tamsayı oluşturmak ve onunla çalışmak için malloc() kullanarak dinamik bellek ayırmayı gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. Bir tamsayı için dinamik olarak bellek ayırmak üzere malloc() kullanın
  2. Döndürülen void işaretçisini bir tamsayı işaretçisine dönüştürün
  3. Kullanıcı girdisinden bir tamsayı değeri okuyun
  4. Başvuru kaldırma operatörünü kullanarak girdi değerini dinamik olarak ayrılan bellekte depolayın
  5. Depolanan değeri şu biçimde yazdırın: Stored value: [value]
  6. Aynı bellek konumunda değerin karesini hesaplayıp depolayın
  7. Karesi alınmış değeri şu biçimde yazdırın: Squared value: [value]

<stdlib.h> kullanmak için malloc() başlığını eklemeyi unutmayın. Programınız, dinamik bellek ayırmanın temel iş akışını göstermelidir: yığından bellek istemek, verileri depolamak ve işlemek için bu belleği kullanmak ve ayrılan 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 görev, belleğin derleme zamanında sabitlenmek yerine çalışma zamanında istendiği ve programlarınıza bellek kullanımında daha fazla esneklik sağlayan temel dinamik bellek ayırma kavramını tanıtır.

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 tamsayı için bellek ayırmak üzere malloc() kullanın
    // 2. Döndürülen işaretçiyi int* olarak dönüştürün
    // 3. Girdi değerini ayrılan bellekte saklayın
    // 4. Saklanan değeri yazdırın
    // 5. Karesini hesaplayın ve aynı konumda saklayın
    // 6. Print the squared value
    
    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