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

char *p;<br />

int main()<br />

{<br />

*p = 'm'; /* NULL pointer assignment */<br />

}<br />

return 0;<br />

Yukarıdaki kodun çalıştırılmasında "NULL pointer assignment" şeklinde bir çalışma zamanı<br />

hatasıyla karşılaşılabilir. Bu sınama derleyicinin çalışabilen program içine yerleştirdiği<br />

"sınama kodu" sayesinde yapılır.<br />

İlkdeğer verilmemiş göstericilerin neden olduğu hatalar işlev çağrılarıyla da ortaya<br />

çıkabilir:<br />

int main()<br />

{<br />

char *ptr;<br />

}<br />

gets(ptr); /* ????? */<br />

return 0;<br />

Yukarıdaki kod parçasında standart gets işlevi ile klavyeden alınan karakterler, bellekte<br />

rastgele bir yere yazılır. Standart gets işlevi klavyeden alınan karakterleri kendisine<br />

argüman olarak gönderilen adresten başlayarak yerleştirdiğine göre, daha önceki örnekte<br />

verilen hata klavyeden girilen bütün karakterler için söz konusudur.<br />

ii)Güvenli Olmayan İlkdeğerlerin Neden Olduğu Gösterici Hataları<br />

Bir göstericiye ilkdeğer verilmesi , o göstericinin güvenli bir bölgeyi gösterdiği anlamına<br />

gelmez. Örneğin :<br />

char *ptr;<br />

/***/<br />

ptr = (char *) 0x1FC5;<br />

*ptr = 'M';<br />

Yukarıdaki örnekte ptr göstericisine atanan (char *) 0x1FC5 adresinin güvenli olup<br />

olmadığı konusunda hiçbir bilgi yoktur. Adrese ilişkin bölgenin kullanıp kullanılmadığı<br />

bilinemez. her ne kadar bellek alanı içinde belli amaçlar için kullanılan güvenli bölgeler<br />

varsa da 1FC5 böyle bir bölgeyi göstermez.<br />

iii)Dizi Taşmalarından Doğan Gösterici Hataları<br />

Bilindiği gibi bir dizi tanımlaması gördüğünde derleyici, derleme sırasında dizi için bellekte<br />

toplam dizi uzunluğu kadar yer ayırır. C derleyicileri derleme zamanında bir dizinin<br />

taşırılıp taşırılmadığını kontrol etmez.<br />

int main()<br />

{<br />

int a[10], k;<br />

}<br />

for (k = 0; k

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

Saved successfully!

Ooh no, something went wrong!