से नीचे लौटें * नीचे 3 कार्य हैं। मुख्य() प्रिंट के रूप में प्रिंट आउट। अब, mycharstack() में स्ट्रिंग को स्टैक पर संग्रहीत किया जाता है, इसलिए "ch" गुंजाइश से बाहर हो जाता है, यह स्ट्रिंग को वापस करने में सक्षम नहीं होना चाहिए। यह सही तरीके से कैसे काम करता है? मुझे लगता है कि mychar() में संग्रहीत स्ट्रिंग भी ढेर पर है। क्या यह सही ढंग से काम करना चाहिए? मुझे लगता है कि कोड और मेमोरी लीक में अन्य त्रुटियां हैं, कृपया मुझे बताएं अगर कोई है। मैं std :: स्ट्रिंग के साथ इन क्लीनर & को आसान कर सकता था। लेकिन मैं समझना चाहता हूं कि char * के साथ क्या चल रहा है।फ़ंक्शन
#include <iostream>
using namespace std;
char* mychar()
{
return "Hello";
}
char* mycharstack()
{
char* ch = "Hello Stack";
return ch;
}
char* mycharheap()
{
char* ch = new char;
ch = "Hello Heap";
return ch;
}
int main()
{
cout << "mychar() = " << mychar() << endl;
cout << "mycharstack() = " << mycharstack() << endl;
cout << "mycharheap() = " << mycharheap() << endl;
system("PAUSE");
return 0;
}
यदि मैंने अपने कोड में उल्लिखित एक के साथ mycharheap() को प्रतिस्थापित किया है, अभी भी रिसाव होगा ... सही? मुख्य() आवंटित स्मृति को मुक्त करने वाले कोई भी नहीं। – ontherocks
हां। मेरा अद्यतन उत्तर देखें। – nothrow
तो mycharheap() जैसे कार्यों के लिए, यह अन्य कार्यों में पैरामीटर के रूप में सीधे इसका उपयोग करने की अनुशंसा नहीं करता है जो इनपुट पैरामीटर के रूप में char * लेते हैं। उदाहरण के लिए कहें कि एक फ़ंक्शन 'प्रिंट (char * char_in) है;' मुझे कुछ प्रिंट नहीं करना चाहिए जैसे 'प्रिंट (mycharheap()); '। इससे स्मृति रिसाव हो जाएगा। क्या मैं सही हू? – ontherocks