C programlamada NULL pointer

Özel bir pointer olan NULL pointer,  bellekte her hangi bir adresi işaret etmek istemediğimiz zaman kullanılmaktadır. C programlama dilinde NULL pointer, keyword değildir. Null pointer’ın tanımlandığı header dosyaları aşağıdaki gibidir;

  • string.h
  • stdio.h
  • stdlib.h
  • alloc.h
  • stddef.h

Peki NULL pointer kullanım yerlerinden birisi;

Bir pointer programda farklı zamanda farklı adresleri işaret edebilmektedir. Bu gibi durumlarda eğer pointer’ın hiçbir adresi işaret etmesini istediğimizde NULL pointer kullanabiliriz. Buna güzel bir örnek;  standart C kütüphanesinde yer alan strchr ile bir string’de istediğimiz karakteri arama işlemi yapmak istediğimizde eğer bu fonksiyon  karakteri bulamadığında NULL pointer’la geri dönüş yaparak hiç bir adresi işaret etmez. Bir pointer’ın bildirildiği yer global ise her hangi atanmadıysa o pointer NULL’dur. Yani adres tutmamakdır. Bununla birlikte bir pointer lokal’de bildirilirip bir adres ataması yapılmazsa çöp adres değeri alarak yaşam döngüsünü sürdürür. Böyle bir durumlarda derleyici bize syntax hatası vermez fakat bu bir Undefined Behaviour(Tanımsız davranıştır).

Null pointer herhangi bir adresi işaret etmediğinden dolayı kesinlikle bir pointer’ın adresi işaret ettiğini düşünüp hemen ona değer atamayın. Belki bu pointer, NULL pointer olabilir. Bundan dolayı aşağıdaki kaynak kodundaki NULL pointer olup olmadığını kontrol edin;

int *ptr;
if (ptr == NULL){
return -1;
} 
else {
}

Bununla birlikte bir pointer’a sıfır değeri ile intiliaze edilirse edilirse. O aslında bir NULL pointer’dır.

NULL pointer ilk kez 1965 yılında C.A.R Hoare tarafından Algol W programla dilinde kullanılmıştır. Hoare’nin NULL porinter hakkında yorumu ise;

“Null referans’ın 1965 yılında keşfini, benim milyon dolarlık hatam diye ifade ediyorum. Benim amacım  derleyici ile otomatik kontrol yaparak kullanılan tüm referansların tamamen güvenli olmasıydı.  Ancak uygulanması çok kolay olduğu için boş bir referans koymanın cazibesine karşı koyamadım. Buda son 40 yılda hatalara ve sistem çökmelerine sebep olarak milyon dolarlık hasarlara yol açmıştır.” -C.A.R Hoare

C.A.R Hoare

 

 

 

 

Bu yazı hakkında ne düşünüyorsun ?
  • Müthiş 
  • Faydalı 
  • Normal 
  • Gereksiz 

About Sidar ATABEY

Elektrik-Elektronik Mühendisi. Makine Mühendisliğinde yan dal programını tamamladı. 1 sene boyunca Erasmus Programı kapsamında Polonya Silesian University of Technology'de eğitim gördü.

View all posts by Sidar ATABEY →