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

Popular posts from this blog

Is there an open source WebSockets (JavaScript) XMPP library? -

java - Is there an object like a "Set" that can contain only unique string values, but also contain a count on the number of occurrences of the string value? -

mysql - Can mysql_pconnect be called multiple times in one php page? -