5.7. Bellek Ayırma
Bazı durumlarda, programcı program için gereken ana bellek miktarını önceden belirleyemez. Örneğin, bu, büyük oranda program girdisine bağlı olabilir. Bir dosyayı sıraya sokan bir program, bütün dosyayı alacak kadar ana belleğe gereksinim duyabilir. Bir dosya istenildiği kadar uzun olabildiğine göre, yürütme esnasında, sistemin bize sağlayabileceği kadar daha fazla bellek elde edebilme yöntemine gereksinimimiz vardır.
Standart kütüphane, buna izin verecek bir fonksiyon,
calloc(n,boy)
içerir. İki argümanı size_t
tipinden
tamsayılar olmalıdır. boy
boyunda n
tane
değişken tutabilecek sıfıra ilklenmiş bir bellek bloğuna bir gösterge
döndürür.
Daha basit başka bir fonksiyon malloc(bayts)
’tır ve
bayts
kadar bayttan oluşan bir bellek bloğuna
bir gösterge döndürür. Argümanın tipi yine size_t
’dir.
size_t
gerçekleştirmeye bağlı olan ve en büyük
bellek boyunu saklayabilecek kadar büyük olan bir tamsayıdır.
free(g)
fonksiyonu daha önce calloc
veya
malloc
ile ayrılmış bulunan ve g
ile gösterilen
bellek bloğunu serbest bırakacaktır.
malloc
ve calloc
’un dönüş tipi ve
free
’nin argüman tipi genel
gösterge tipi olan
dır.
void *
tipi bekleyen bir fonksiyona
bir gösterge argümanı geçirdiğinizde, bir kalıp kullanarak, bunu
void *
tipine dönüştürmeniz gerekir. Aynı şekilde, bir fonksiyon
void *
döndürüyorsa, bunu uygun gösterge tipine dönüştürmeniz gerekir. Her tip
gösterge, herhangi bir bilgi yitimine uğramadan,
void *
tipine ve daha sonra eski
tipine dönüştürülebilir. void *
stdlib.h
başlık dosyası bu fonksiyonlar
için gerekli bildirimleri içerir ve bu bölümün sonunda bu fonksiyonları
kullanan örnek bir program bulunmaktadır.