Boş işaretçisi

Bilgisayar biliminde boş işaretçi, sıfır referansı veya boş gösterge, geçerli bir nesne adresini göstermeyen işaretçi ya da dolaylamaya verilen genel isimdir. Bir başka değiş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ş bir işaretçi, değeri belirtilmemiş bir işaretçi ile karıştırılmamalıdır: Boş bir 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 nedenden dolayı, 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 sonuç verebilir.

CDüzenle

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 ++Düzenle

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çinullptr sabitini yazılımcıların kullanabilmesi için yaratmıştır.

TarihDüzenle

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.

KaynakçaDüzenle

  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 (14th printing of 3rd bas.). 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.