21 Mart 2025 Cuma

C++ Null Pointer, Dangling Referans ve Pointerlar Nedir ?


1. Pointer'lar (İşaretçiler)

  • Tanım: Pointer'lar, bellek adreslerini tutan değişkenlerdir. Başka bir değişkenin veya bellek konumunun adresini saklarlar.
  • Kullanım:
    • Dinamik bellek yönetimi (bellek tahsisi ve serbest bırakılması).
    • Fonksiyonlara büyük veri yapılarını geçirme (kopyalamadan).
    • Dizi ve diğer veri yapılarına erişim.
  • Örnek:
C++

int sayi = 10;
int* ptr = &sayi; // ptr, sayi değişkeninin adresini tutar.

std::cout << "Sayi degeri: " << sayi << std::endl;
std::cout << "ptr'nin tuttugu adres: " << ptr << std::endl;
std::cout << "ptr'nin isaret ettigi deger: " << *ptr << std::endl; // *ptr, ptr'nin işaret ettiği değeri verir.

2. Null Pointer'lar (Boş İşaretçiler)

  • Tanım: Null pointer, herhangi bir geçerli bellek adresini işaret etmeyen bir pointer'dır. Genellikle bir pointer'ın henüz başlatılmadığını veya geçerli bir nesneyi işaret etmediğini belirtmek için kullanılır.
  • Değer: C++11'den itibaren, nullptr anahtar kelimesi null pointer'ı temsil etmek için kullanılır. C++11'den önce, NULL veya 0 kullanılırdı.
  • Kullanım:
    • Bir pointer'ın geçerli olup olmadığını kontrol etmek.
    • Hata durumlarını belirtmek.
  • Örnek:
C++

int* ptr = nullptr; // ptr, null pointer'dır.

if (ptr == nullptr) {
std::cout << "ptr null pointer'dir." << std::endl;
}

3. Dangling Referanslar (Sarkan Referanslar)

  • Tanım: Dangling referans, artık geçerli olmayan bir bellek konumuna veya nesneye işaret eden bir referanstır. Bu genellikle, referansın işaret ettiği nesne silindiğinde veya kapsam dışına çıktığında meydana gelir.
  • Sorun: Dangling referanslar, tanımsız davranışa (undefined behavior) yol açar. Programınızın çökmesine veya beklenmedik sonuçlar üretmesine neden olabilir.
  • Nedenler:
    • Bir fonksiyonun yerel değişkenine referans döndürmesi.
    • Silinmiş bir nesneye referans tutulması.
  • Örnek:
C++

int* danglingPointer() {
int localVariable = 10;
return &localVariable; // localVariable fonksiyon sonlandığında silinir.
}

int main() {
int* ptr = danglingPointer();
// ptr artık geçersiz bir bellek adresini işaret ediyor.
// *ptr kullanmak tanımsız davranışa yol açar.
return 0;
}

Önemli Notlar:

  • Pointer'lar ve referanslar, bellek yönetimi ve veri yapıları ile çalışırken dikkatli kullanılmalıdır.
  • Null pointer'lar, pointer'ların geçerliliğini kontrol etmek için önemlidir.
  • Dangling referanslardan kaçınmak için, referansların ömrünü dikkatlice yönetmek gerekir.
  • C++'da dinamik bellek yönetimi yaparken, new ile tahsis edilen belleği delete ile serbest bırakmayı unutmayın.
  • Akıllı pointerlar (smart pointers) (örneğin, std::unique_ptr, std::shared_ptr), bellek sızıntılarını ve dangling pointer'ları önlemeye yardımcı olabilir.


 

Benzer Yayınlar

C++ Null Pointer, Dangling Referans ve Pointerlar Nedir ?
4/ 5
Oleh

Abone Olun

Yazılarımızı beğeniyor musunuz?Abone Olun Yazılarımı Kaçırmayın.

Lütfen yorum yaparken şunlara dikkat ediniz:

Küfürlü, siyasi veya huzur bozucu yorumlar yapmamaya,
Reklam, spam gibi yorumlar yapmamaya.