İçeriğe atla

Boş işaretçisi

Vikipedi, özgür ansiklopedi

Bilgisayar biliminde boş işaretçi, sıfır referansı veya boş gösterici (İngilizceNull pointer), geçerli bir nesne adresini göstermeyen işaretçi ya da dolaylamaya verilen genel isimdir. Bir başka deyişle, değeri sıfır olan işaretçidir; yani bilgisayarın belleğinde geçerli olan bir adresi işaret etmemektedir. Bilgisayar programlarında, uzunluğu bilinmeyen bir listenin sonu veya bazı eylemlerin gerçekleştirilememesi gibi koşulları göstermek için rutin olarak boş işaretçiler kullanır; boş işaretçilerinin bu kullanımı, sıfırlanabilir tip veya opsiyonel bir veri tipi gibi düşünülebilir.

Boş işaretçi, değeri belirtilmemiş bir işaretçi ile karıştırılmamalıdır: Bir boş işaretçi, geçerli bir nesneyi işaret eden herhangi bir işaretçiden kesinlikle farklıdır. Öte yandan, programlama diline ve uygulamaya bağlı olarak, değeri belirtilmemiş bir işaretçi için aynı şeyi söylemek mümkün değildir. Bu nedenle, bir takım durumlarda değeri belirtilmemiş işaretçiler, diğer geçerli işaretçilerle eşit olabilir; veya boş işaretçilerle eşit olabilir. Her iki durum da farklı zamanlarda gerçekleşebilir. Veya karşılaştırma tanımsız duruma neden olabilir.

C'de, her türden iki boş göstergenin eşit karşılaştırılması garanti edilir.[1] Önişlemci makro NULL, bir uygulama tarafından tanımlanan boş gösterici sabiti olarak tanımlanır.[2] C standardı, boş göstergenin bellek adresi işaretçisiyle aynı olduğunu söylemez   Ancak, pratikte durum bu olabilir. Bir boş gösterici deşifre etmek, C[3] için tanımsız bir davranıştır.

Pratikte, bir boş göstergenin adresine erişmeye çalışmak ya da eşlenmemiş bellekten okuma veya yazma girişiminde bulunmak bir segmentasyon hatası veya bellek erişim ihlali tetikleyebilir. Bunu yapmak, programın çökmesine veya program kodu tarafından yakalanabilecek bir yazılım istisnasına dönüştürülebilir. Ancak, durumun böyle olmadığı bazı durumlar vardır. Örneğin, x86 gerçek modunda, 0000:0000 adresi okunabilir ve genellikle yazılabilirdir ve bu adrese bir işaretçinin kaydının kaldırılması, uygulamada tanımlanmamış ancak kilitlenmeyen davranışlara yol açabilecek mükemmel derecede geçerli ancak genellikle istenmeyen bir eylemdir.

C dilinde dinamik olarak bellek ataması (yaratma) yapmak için kullanılan metotlar da (calloc ve malloc gibi) kullanıldıkları zaman şayet başarılı bir şekilde boş bir bellek bölgesi yaratamazlarsa boş işaretçi return ederler.

C++ 'da, NULL makrosu C'den devralınırken, sıfır için bir tam sayı değişmez değeri geleneksel olarak bir boş işaretçi sabitini temsil etmek için kullanılmaktadır.[4] Ancak, C++11 bunun yerine, açık boş işaretçi nullptr sabitini yazılımcıların kullanabilmesi için yaratmıştır.

2009'da Tony Hoare (CAR Hoare),[5] 1965 yılında ALGOL W dilinin bir parçası olarak sıfır referansını icat ettiğini belirtti. 2009 yılında, Hoare boş işaretçi buluşunun "milyar dolarlık bir hata" olarak tanımlamıştır.

  1. ^ ISO/IEC 9899, clause 6.3.2.3, paragraph 4.
  2. ^ ISO/IEC 9899, clause 7.17, paragraph 3: NULL... which expands to an implementation-defined null pointer constant...
  3. ^ ISO/IEC 9899, clause 6.5.3.2, paragraph 4.
  4. ^ "Chapter 5:
    The const qualifier (§5.4) prevents accidental redefinition of NULL and ensures that NULL can be used where a constant is required.". The C++ Programming Language. 14th printing of 3rd. United States and Canada: Addison–Wesley. Mart 2001. s. 88.
     
  5. ^ "Null References: The Billion Dollar Mistake". InfoQ.com. 25 Ağustos 2009. 28 Ağustos 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2020.