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 />

bellek bloğuna ulaşmak sık yapılan bir gösterici hatasıdır. Aşağıdaki kodu derleyerek<br />

çalıştırın:<br />

#include <br />

#include <br />

#include <br />

#define ARRAY_SIZE 100<br />

int main()<br />

{<br />

char name_entry[ARRAY_SIZE];<br />

char *pd;<br />

printf("bir isim giriniz: ");<br />

gets(name_entry);<br />

pd = (char *)malloc(strlen(name_entry + 1));<br />

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

printf("dinamik bir blok elde edilemiyor!\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

strcpy(pd, name_entry);<br />

printf("yazi = %s\n", pd);<br />

free(pd);<br />

printf("yazi = %s\n", pd); /* Yanlış! */<br />

}<br />

return 0;<br />

Yukarıdaki main işlevi içinde önce klavyeden alınan bir isim name_entry isimli yerel diziye<br />

yerleştiriliyor. Daha sonra çağrılan malloc işlevi ile klavyeden alınan ismin uzunluğundan<br />

1 byte daha büyük bir bellek bloğu elde ediliyor. Elde edilen bellek bloğuna yerel dizideki<br />

isim kopyalanıyor. Daha sonra dinamik bloktaki isim ekrana yazdırılıyor. Yapılan<br />

free(pd)<br />

çağrısıyla dinamik blok heap alanına geri veriliyor. Ancak geri verme işleminden sonra<br />

yapılan printf çağrısıyla geri verilen bloğa ulaşılıyor. Bu bir gösterici hatasıdır.<br />

Dinamik bellek işlevleri dinamik yer ayırma ve dinamik bloğu geri verme işlemlerini<br />

programın çalışma zamanında gerçekleştirirler.<br />

free işlevine ilişkin tipik bir hata da daha önce elde edilen bir dinamik bloğun, free<br />

işleviyle küçültülmeye çalışılmasıdır. Aşağıdaki kodu inceleyelin:<br />

#include <br />

int main()<br />

{<br />

char *pd;<br />

}<br />

pd = (char *)malloc(1000);<br />

/****/<br />

free(pd + 500); /* Yanlis */<br />

/****/<br />

free(pd);<br />

return 0;<br />

329

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

Saved successfully!

Ooh no, something went wrong!