सैद्धांतिक रूप से मैं ऐसा कह सकता हूं
free(ptr);
free(ptr);
एक स्मृति भ्रष्टाचार है क्योंकि हम उस स्मृति को मुक्त कर रहे हैं जिसे पहले ही मुक्त किया जा चुका है।
पर क्या अगर
free(ptr);
ptr=NULL;
free(ptr);
जैसा कि ओएस एक अपरिभाषित तरीके से व्यवहार करेगा, मुझे इसके बारे में वास्तविक सैद्धांतिक विश्लेषण नहीं मिल सकता है कि क्या हो रहा है। मैं जो कुछ भी कर रहा हूं, यह स्मृति भ्रष्टाचार है या नहीं?
क्या एक NULL पॉइंटर को वैध बनाना है?
delete NULLC ++ में मान्य नहीं है। हटाने को ठोस प्रकार के शून्य-पॉइंटर मानों पर लागू किया जा सकता है, लेकिन नहीं NULL। delete (int*) NULLकानूनी है, लेकिन नहीं delete NULL।
ptrस्मृति को इंगित करता है, और आप उस freeपर कॉल नहीं करते हैं , तो मेमोरी लीक हो जाएगी। NULLबस इसे सेट करने से मेमोरी पर आपका हैंडल खो जाता है, और लीक हो जाता है। यदि ptr ऐसा होता हैNULL , तो कॉलिंग freeएक संचालन नहीं है।
free(ptr)साथ बदल सकते हैं ptr = NULL। किसी ने भी ऐसा कुछ नहीं कहा।