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