पॉइंटर को NULL
बाद में सेट करना एक free
संदिग्ध अभ्यास है जो अक्सर एक "अच्छे प्रोग्रामिंग" नियम के रूप में लोकप्रिय रूप से झूठे आधार पर लोकप्रिय होता है। यह उन नकली सच्चाइयों में से एक है जो "सही लगता है" श्रेणी से संबंधित हैं लेकिन वास्तव में पूरी तरह से उपयोगी कुछ भी नहीं प्राप्त करते हैं (और कभी-कभी नकारात्मक परिणाम भी होते हैं)।
कथित तौर पर, एक सूचक को सेट करने के NULL
बाद free
माना जाता है कि "डबल फ्री" समस्या को रोकने के लिए जब एक ही पॉइंटर मान को free
एक से अधिक बार पास किया जाए। वास्तविकता में, 10 में से 9 मामलों में वास्तविक "डबल फ्री" समस्या तब होती है जब एक ही पॉइंटर मान रखने वाले विभिन्न पॉइंटर ऑब्जेक्ट्स को तर्क के रूप में उपयोग किया जाता है free
। कहने की जरूरत नहीं है, इस तरह के मामलों में समस्या को रोकने के लिए पूरी तरह से कुछ भी हासिल करने के लिए एक संकेतक सेट करने के NULL
बाद free
।
बेशक, तर्क के रूप में एक ही पॉइंटर ऑब्जेक्ट का उपयोग करते समय "डबल फ्री" समस्या में चलना संभव है free
। हालांकि, इस तरह की वास्तविकता स्थितियों में आम तौर पर कोड की सामान्य तार्किक संरचना के साथ एक समस्या का संकेत मिलता है, न कि केवल आकस्मिक "डबल फ्री"। इस तरह के मामलों में समस्या से निपटने का एक उचित तरीका है कि एक ही पॉइंटर को free
एक से अधिक बार पास करने की स्थिति से बचने के लिए कोड की संरचना की समीक्षा और पुनर्विचार करना । ऐसे मामलों में NULL
"निर्धारित" समस्या पर और उस पर विचार करने के लिए सूचक को सेट करना कालीन के नीचे समस्या को स्वीप करने के प्रयास से ज्यादा कुछ नहीं है। यह केवल सामान्य स्थिति में काम नहीं करेगा, क्योंकि कोड संरचना के साथ समस्या हमेशा खुद को प्रकट करने का एक और तरीका ढूंढेगी।
अंत में, यदि आपका कोड विशेष रूप से पॉइंटर मान के होने NULL
या न होने पर भरोसा करने के लिए डिज़ाइन किया गया है NULL
, तो पॉइंटर मान को NULL
बाद में सेट करना पूरी तरह से ठीक है free
। लेकिन एक सामान्य "अच्छा अभ्यास" नियम के रूप में (जैसा कि "हमेशा अपने सूचक को NULL
बाद में सेट करें free
") यह है, एक बार फिर, एक प्रसिद्ध और बहुत बेकार नकली, अक्सर विशुद्ध रूप से धार्मिक, वूडू जैसे कारणों के लिए कुछ द्वारा पीछा किया जाता है।
ptr == NULL
इसके साथ कुछ भी करने से पहले यह जांचने में सक्षम हो। यदि आप अपने फ्री होल्ड पॉइंट्स को कम नहीं करते हैं, तो आपकोptr != NULL
अभी भी अनुपयोगी पॉइंटर मिलेगा ।