मेरी समारोह:: कार्य के बाहर एक स्टैक आवंटित संरचना क्यों मौजूद है?
struct hostent * gethost(char * hostname){
if(/*some condition under which I want
to change the mode of my program to not take a host*/){
return null
}
else{
struct hostent * host = gethostbyname(hostname);
return host;
}
}
मुख्य में
:
struct hostent * host = gethost(argv[2]);
(कोड में किसी भी मामूली त्रुटियों पर ध्यान न दें, मैं स्मृति से उगल रहा हूँ)
इस ठीक काम करता है। और वालग्रिंड मुझे नहीं बताता कि मैं स्मृति खो रहा हूं, इस तथ्य के बावजूद कि मैं मुक्त नहीं हूं।
क्यों? मैंने सोचा कि स्टैक पर आवंटित सामान फ़ंक्शन कॉल रिटर्निंग के साथ गायब हो जाता है? या ऐसा इसलिए है क्योंकि मैं सूचक लौटाता हूं? क्या यह किसी भी तरह से खतरनाक है?
आह बहुत बहुत धन्यवाद। तो यह 'gethostbyname' के लिए अद्वितीय है? अगर मैंने इसे 'char *' के लिए किया है, उदाहरण के लिए, उस सरणी में मान बाद में ओवरराइट हो सकते हैं? मेरा प्रोग्राम केवल प्रति होस्ट एक मेजबान से निपटना है, इसलिए यह ठीक होना चाहिए। –
क्या किसी पॉइंटर द्वारा इंगित मूल्य को बाद में कॉल पर ओवरराइट किया जाता है, उस फ़ंक्शन पर निर्भर करता है जिसे आप कॉल कर रहे हैं। किसी भी सी मानक लाइब्रेरी फ़ंक्शन के लिए जो एक पॉइंटर लौटाता है जिसे आप पास नहीं करते हैं, आप मान सकते हैं कि यह स्थिर स्मृति में पॉइंटर लौटा रहा है और इसे ओवरराइट किया जा सकता है। – Gabe