İşaretçilerle ilgili çeşitli zorluklar vardır:
- Örtüşme Farklı nesneler / değişkenler kullanarak bir nesnenin değerini değiştirme olasılığı.
- Yöresel olmama Bir nesne değerini, bildirildiği değerden farklı bir bağlamda değiştirme olasılığı (bu aynı zamanda referansla iletilen argümanlarda da olur).
- Ömür Boyu Uyumsuzluk Bir işaretçinin ömrü, işaret ettiği nesnenin ömründen farklı olabilir ve geçersiz referanslara (SEGFAULTS) veya çöplere yol açabilir.
- İşaretçi Aritmetiği . Bazı programlama dilleri, işaretçilerin tamsayı olarak değiştirilmesine izin verir ve bu, işaretçilerin herhangi bir yeri gösterebileceği anlamına gelir (bir hata olduğunda en beklenmedik yerler dahil). İşaretçi aritmetiğini doğru şekilde kullanmak için, bir programcı işaret edilen nesnelerin bellek boyutlarının farkında olmalıdır ve bu daha düşünülmesi gereken bir şeydir.
- Yazım Türleri Bir işaretçiyi bir türden diğerine yayınlama yeteneği, bir nesnenin belleğinin amaçlanandan farklı bir belleğinin üzerine yazılmasına olanak tanır.
Bu yüzden bir programcı işaretçiler kullanırken daha iyi düşünmelidir ( iki soyutlama seviyesi hakkında bilmiyorum ). Bu bir acemi tarafından yapılan tipik hataların bir örneğidir:
Pair* make_pair(int a, int b)
{
Pair p;
p.a = a;
p.b = b;
return &p;
}
Yukarıdaki gibi bir kodun, işaretçi kavramına sahip olmayan, ancak isimler (referanslar), nesneler ve değerlerden biri olan işlevsel programlama dilleri ve çöp toplama (Java, Python) içeren diller için mükemmel bir şekilde makul olduğunu unutmayın. .
Özyinelemeli işlevlerle ilgili zorluk, yeterli matematiksel altyapıya sahip olmayan (özyinelemenin yaygın ve gerekli bilginin olduğu yerlerde) , daha önce çağrıldığına bağlı olarak , işlevin farklı davranacağını düşünerek onlara yaklaşmaya çalıştığında ortaya çıkar . Bu sorun ağırlaşmaktadır çünkü özyinelemeli işlevler gerçekten de bu şekilde düşünmeniz gereken şekillerde oluşturulabilir onları anlamak için .
Veri yapısının yerinde değiştirildiği bir Kırmızı-Siyah Ağacın prosedürel bir uygulamasında olduğu gibi, işaretçiler geçirilen yinelemeli işlevleri düşünün ; düşünmek daha zor bir şeyişlevsel bir meslektaşından .
Soruda bahsedilmiyor, ancak acemilerin zorluk çektiği diğer önemli sorun eşzamanlılıktır .
Diğerlerinin de belirttiği gibi, bazı programlama dili yapılarında ek, kavramsal olmayan bir sorun vardır: anlasak bile, bu yapılarla ilgili basit ve dürüst hataların hatalarını ayıklamak son derece zor olabilir.