c++ - .c_str() weirdness? Data changes without rhyme or reason? -
मेरे पास यह साधारण कार्य है:
const wchar_t * स्ट्रिंग मैनेजर :: GetWCharTStar (int stringId ) {Std :: wstring मूल स्ट्रिंग = स्ट्रिंग मैनेजर :: GetString (stringId); Const wchar_t * retStr = originalString.c_str (); वापसी retStr; }
उस फ़ंक्शन के दूसरी पंक्ति में, मेरे पास सही wchar_t * है हालांकि, जब मैं वापस जाना होता हूं, तो डेटा कूड़ा डेटा पर स्विच होता है। बीच में कोई फ़ंक्शन नहीं है क्या देता है?!
मूल स्ट्रिंग को स्टैक पर आवंटित किया गया है। .c_str () विधि सिर्फ wstring ऑब्जेक्ट के कुछ निकटतम आंतरिक मेमोरी में एक सूचक देता है। जब फ़ंक्शन देता है, मूल स्ट्रिंग गुंजाइश से बाहर निकल जाती है और नष्ट हो जाती है, इसलिए पॉइंटर वैल्यू आपको हटाई गई मेमोरी के लिए पॉइंट मूव देती है।
यदि आपको यह करने की आवश्यकता है, तो आपको डेटा की प्रतिलिपि मेमोरी में करना चाहिए नए या मॉलोक () के साथ आवंटित करें, और फिर कॉलर को उस मेमोरी को हटाना / मुक्त करना होगा।
Comments
Post a Comment