एक सी ++ पुस्तक मैं पढ़ रहा हूं कि जब कोई सूचक delete
ऑपरेटर को उस स्थान पर मेमोरी का उपयोग करके हटा दिया जाता है जो यह इंगित करता है कि "मुक्त" है और इसे अधिलेखित किया जा सकता है। इसमें यह भी कहा गया है कि जब तक पुन: असाइन या सेट नहीं किया जाता है, तब तक पॉइंटर उसी स्थान को इंगित करता रहेगा NULL
।
विज़ुअल स्टूडियो 2012 में हालांकि; यह मामला प्रतीत नहीं होता है!
उदाहरण:
#include <iostream>
using namespace std;
int main()
{
int* ptr = new int;
cout << "ptr = " << ptr << endl;
delete ptr;
cout << "ptr = " << ptr << endl;
system("pause");
return 0;
}
जब मैं इस कार्यक्रम को संकलित करता हूं और चलाता हूं तो मुझे निम्नलिखित आउटपुट मिलते हैं:
ptr = 0050BC10
ptr = 00008123
Press any key to continue....
स्पष्ट रूप से वह पता जिसे सूचक डिलीट होने पर बदलावों की ओर इशारा करता है!
ये क्यों हो रहा है? यह विशेष रूप से Visual Studio के साथ कुछ करने के लिए है?
और यदि डिलीट किए गए पते को वैसे भी बदल सकते हैं, तो वह NULL
कुछ यादृच्छिक पते के बजाय सूचक को स्वचालित रूप से सेट क्यों नहीं करेगा ?