08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

işlevleri kullanılır.Yazılan kaynak kodun taşınabilirliği açısından standart C işlevleri tercih<br />

edilmelidir.<br />

Aşağıda dinamik bellek yönetiminde kullanılan standart C işlevlerini tek tek ayrıntılı olarak<br />

inceleniyor:<br />

malloc işlevi<br />

malloc işlevi programın çalışma zamanı sırasında bellekten dinamik bir blok elde etmek<br />

için kullanılır. İşlevin stdlib.h başlık dosyası içindeki bildirimi aşağıdaki gibidir:<br />

void *malloc(size_t nbyte);<br />

size_t türünün, unsigned int ya da unsigned long türlerinden birinin typedef ismi<br />

olduğunu biliyorsunuz.<br />

İşlev, elde edilmek istenen bloğun byte olarak uzunluğunu alır. Ayrılan alanın bitişik<br />

(contiguous) olması güvence altına alınmıştır. malloc işlevinin geri dönüş değeri elde<br />

edilen bellek bloğunun başlangıç adresidir. Bu adres void türden olduğu için, herhangi bir<br />

türden göstericiye sorunsuz bir şekilde atanabilir. Bu adres herhangi bir türden<br />

göstericiye atandığı zaman artık elde edilen blok, başlangıç adresini tutan gösterici<br />

yardımıyla bir nesne ya da bir dizi gibi kullanılabilir. malloc işlevinin istenilen bloğu<br />

ayırması güvence altında değildir. malloc işlevi birçok nedenden dolayı başarısız olabilir.<br />

Bellekte elde edilmek istenen alan kadar boş bellek alanının bulunmaması sık görülen bir<br />

başarısızlık nedenidir.<br />

malloc işlevi başarısız olduğunda NULL adresine geri döner. İşlev çağrısının başarısı<br />

mutlaka sınanmalıdır. malloc işlevi ile bellekte bir blok elde edilmesine ilişkin aşağıda bir<br />

örnek veriliyor:<br />

#include <br />

#include <br />

int main()<br />

{<br />

int *pd;<br />

int k, n;<br />

srand(time(0));<br />

n = rand() % 100 + 10;<br />

pd = (int *) malloc(n * sizeof(int));<br />

if (pd == NULL) {<br />

printf("cannot allocate memory\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

printf("rastgele %d sayi\n", n);<br />

}<br />

for (k = 0; k < n; ++k) {<br />

pd[k] = rand() % 100;<br />

printf("%d ", pd[k]);<br />

}<br />

/***/<br />

Yukarıdaki main işlevinde, n değişkeninin değeri programın çalışma zamanında elde<br />

standart rand işlevine yapılan çağrı ile rastgele olarak elde ediliyor. Daha sonra standart<br />

malloc işleviyle n tane int türden nesnenin sığabileceği kadar büyüklükte bir bellek bloğu<br />

elde ediliyor.<br />

324

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!