08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

#include <br />

#include <br />

int main()<br />

{<br />

int *pd;<br />

int k;<br />

int n, nplus;<br />

printf("kac tamsayı : ");<br />

scanf("%d", &n);<br />

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

if (!pd) {<br />

printf("bellek yetersiz!..\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

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

pd[k] = k;<br />

printf("kac tamsayı eklenecek: ");<br />

scanf("%d", &nplus);<br />

pd = (int *) realloc(pd, sizeof(int) * (n + nplus));<br />

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

printf("bellek yetersiz!..\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

for (; k < n + nplus; ++k)<br />

pd[k] = k;<br />

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

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

printf("\n");<br />

free(pd);<br />

}<br />

return 0;<br />

malloc işlevi ile int türden n tane nesnenin sığacağı kadar büyüklükte bir dinamik alan<br />

elde ediliyor. malloc işlevi başarılı olamazsa standart exit işleviyle program<br />

sonlandırılıyor.<br />

Elde edilen dinamik alandaki n tane nesneye bir döngü yardımıyla atamalar yapılıyor.<br />

Daha sonra çağrılan realloc işleviyle elde edilen dinamik alan nplus tane nesneyi daha<br />

içine alabilecek biçimde genişletiliyor. Eğer realloc işlevi başarısız olursa program<br />

sonlandırılıyor. Ardından realloc işlevinin geri dönüş değeri olan adresindeki n + nplus<br />

adet nesneye sahip dizi yine bir döngü deyimiyle yazdırılıyor.<br />

realloc işlevi başarılı olmuşsa iki olasılık söz konusudur:<br />

1. realloc işlevi daha önce elde edilen dinamik alanın hemen altında yani daha yüksek<br />

sayısal adreste, ilk bloğu büyütecek biçimde boş alan bularak ek bellek alanını buradan<br />

sağlamıştır. Bu sistemlerin çoğunda pek karşılaşılan bir durum değildir. Bu durumda<br />

realloc işlevinin geri dönüş değeri olan adres işlevin birinci parametresine gönderilen<br />

adrestir.<br />

333

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

Saved successfully!

Ooh no, something went wrong!