C

Dangling pointer nedir?

Dangling pointer (sallanan işaretçi), bir bellek konumuna işaret eden bir işaretçi (pointer) değişkenin, bu bellek konumu geçersiz hale geldiğinde kullanılmaya devam edilmesi durumunda ortaya çıkan bir programlama hatasıdır. Bu, genellikle bir bellek bölgesinin serbest bırakılmasından sonra veya bellek tahsisi yapılan bir alanın kapsamının sona ermesinden sonra meydana gelir.

Örnek vermek gerekirse, C programlama dilinde bir bellek bloğu dinamik olarak tahsis edildiğinde, bu bellek bloğuna işaret eden bir işaretçi elde edilir. Ancak, bu bellek bloğu daha sonra serbest bırakılırsa, işaretçi hala o bellek bölgesini işaret eder durumda olabilir. Eğer bu işaretçi daha sonra kullanılmaya çalışılırsa, bu bir “dangling pointer” hatasına neden olur.

#include <stdlib.h>
#include <stdio.h>

int main() {
    int *ptr = (int *)malloc(sizeof(int)); // Bellek tahsisi yapılıyor
    *ptr = 10; // İşaretçiye bir değer atandı
    free(ptr); // Bellek serbest bırakıldı
    // Artık ptr geçersiz hale geldi, bir dangling pointer oldu
    printf("%d\n", *ptr); // Dangling pointer kullanılmaya çalışılıyor
    return 0;
}

Bu kod parçasında, ptr işaretçisi bellek tahsis edildikten sonra bir değer alır. Ancak, free(ptr) ifadesiyle bellek serbest bırakılır. Bundan sonra ptr, artık geçersiz hale gelir ve bir dangling pointer olur. printf fonksiyonunda bu dangling pointer kullanılmaya çalışıldığında, program hatalı davranışlar sergileyebilir, çünkü bellekteki veri artık garantili olarak mevcut değildir. Bu, çeşitli hatalara yol açabilir, hatta programın çökmesine neden olabilir.

Leave a comment