संकेत के साथ कई कठिनाइयाँ हैं:
- अलियासिंग अलग-अलग नामों / वैरिएबल का उपयोग कर एक वस्तु का मान बदलने की संभावना।
- गैर-स्थानीयता किसी वस्तु के मूल्य को उस संदर्भ से अलग संदर्भ में बदलने की संभावना है जिसमें यह घोषित किया गया है (यह संदर्भ द्वारा पारित तर्कों के साथ भी होता है)।
- लाइफटाइम मिसमैच एक पॉइंटर का जीवनकाल उस ऑब्जेक्ट के जीवनकाल से अलग हो सकता है जो इसे इंगित करता है, और इससे अमान्य संदर्भ (SEGFAULTS) या कचरा हो सकता है।
- सूचक अंकगणित । कुछ प्रोग्रामिंग भाषाएं पॉइंटर्स को पूर्णांक के रूप में हेरफेर करने की अनुमति देती हैं, और इसका मतलब है कि पॉइंटर्स कहीं भी इंगित कर सकते हैं (एक बग मौजूद होने पर सबसे अप्रत्याशित स्थानों सहित)। सूचक अंकगणित को सही ढंग से उपयोग करने के लिए, एक प्रोग्रामर को इंगित की गई वस्तुओं के स्मृति आकारों के बारे में पता होना चाहिए, और इसके बारे में सोचने के लिए कुछ और है।
- टाइप कास्ट एक सूचक को एक प्रकार से दूसरे में डालने की क्षमता किसी इच्छित वस्तु की मेमोरी को ओवरराइट करने की अनुमति देती है।
इसीलिए एक प्रोग्रामर को पॉइंटर्स का उपयोग करते समय अधिक अच्छी तरह से सोचना चाहिए (मुझे एब्सट्रैक्शन के दो स्तरों के बारे में पता नहीं है )। यह एक नौसिखिया द्वारा की गई विशिष्ट गलतियों का एक उदाहरण है:
Pair* make_pair(int a, int b)
{
Pair p;
p.a = a;
p.b = b;
return &p;
}
ध्यान दें कि ऊपर की तरह कोड उन भाषाओं में पूरी तरह से उचित है जिनके पास संकेत की अवधारणा नहीं है, बल्कि नामों (संदर्भों), वस्तुओं और मूल्यों में से एक है, कार्यात्मक प्रोग्रामिंग भाषाओं के रूप में, और कचरा संग्रह के साथ भाषाएं (जावा, पायथन) ।
पुनरावर्ती कार्यों के साथ कठिनाई तब होती है जब बिना गणितीय पृष्ठभूमि के लोग (जहां पुनरावर्तन सामान्य और आवश्यक ज्ञान है) यह सोचकर उनसे संपर्क करने की कोशिश करते हैं कि फ़ंक्शन पहले कितनी बार इस आधार पर अलग - अलग व्यवहार करेगा । यह समस्या बढ़ जाती है क्योंकि पुनरावर्ती कार्य वास्तव में उन तरीकों से बनाए जा सकते हैं जिनमें आपको उन्हें समझने के लिए उस तरह से सोचना पड़ता है।
पॉइंटर्स के साथ पुनरावर्ती कार्यों के बारे में सोचो, जैसे कि एक रेड-ब्लैक ट्री के एक प्रक्रियात्मक कार्यान्वयन में जिसमें डेटा संरचना को संशोधित किया गया है; एक कार्यात्मक समकक्ष की तुलना में इसके बारे में सोचना अधिक कठिन है ।
यह प्रश्न में उल्लिखित नहीं है, लेकिन अन्य महत्वपूर्ण मुद्दे जिनके साथ नौसिखियों को कठिनाई होती है, वह संक्षिप्त है ।
जैसा कि दूसरों ने उल्लेख किया है, कुछ प्रोग्रामिंग भाषा निर्माणों के साथ एक अतिरिक्त, गैर-वैचारिक समस्या है: यह है कि भले ही हम समझते हैं, उन निर्माणों के साथ सरल और ईमानदार गलतियां डिबग करना बेहद मुश्किल हो सकता है।