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.