से मुक्त किया जा सकता है, मैंने इसका उत्तर देने के लिए पूरी तरह से देखा है लेकिन एक ऐसा प्रतीत नहीं होता है। (मेरे पास सी ++ के साथ काफी सीमित अनुभव है)यह देखने के लिए जांच कर रहा है कि क्या पॉइंटर को
मेरी लाइब्रेरी में, मैं एक स्ट्रिंग मुक्त करता हूं। (कमाल, हुह?)
यह वह समस्या है जहां समस्या उत्पन्न होती है। मेरे पास एक संरचना है जिसमें एक char * है जिसे ढेर पर आवंटित किया जा सकता है या नहीं हो सकता है। हालांकि यह एक वैध सूचक है, इसे मुक्त नहीं किया जा सकता है।
आईई
char* s1 = "A String";
char* s2 = (char*)memcpy(malloc(9), s1, 9);
free(s2);
free(s1);
पर एक त्रुटि का कारण होगा "मुक्त (S1);" (जैसा कि यह होना चाहिए) क्योंकि एस 1 वास्तव में को मुक्त करने के लिए की आवश्यकता नहीं है, (यह ढेर पर नहीं है) मैं इसे "स्वीकार्य" तरीके से कैसे संभाल सकता हूं? (इसी तरह के विषयों पर "इसे क्रैश करने दें" का जवाब उचित आईएमओ नहीं लग रहा था)
क्योंकि संरचना पूरी तरह से लाइब्रेरी द्वारा बनाई गई नहीं है, इसलिए यह गारंटी देना संभव नहीं है कि किसी स्ट्रिंग को कुछ उपयोग करने पर ठीक से कॉपी किया जाएगा memcpy की तरह।
यह एक विंडोज लाइब्रेरी के रूप में देखकर, मुझे आईएसओ सी सामान या मानक सी कार्यों का उपयोग करने की चिंता करने की आवश्यकता नहीं है।
सर्वश्रेष्ठ उत्तर (IMHO): गारंटी नहीं है कि 'struct' केवल लाइब्रेरी में बनाए _is_ एक अपारदर्शी सूचक का प्रयोग करें। (अगर मैं विंडोज का उपयोग करता हूं तो मैं और मदद की पेशकश करूंगा। क्षमा करें। +1 हालांकि।) –
धन्यवाद, अगर सबसे खराब सबसे खराब आता है तो मैं या तो ऐसा कर सकता हूं या एसईएच का उपयोग कर सकता हूं (हालांकि बाद वाला मुझे ऐसा महसूस कर देगा कि मैं कुछ गलत कर रहा था) – James
यह एक विंडोज लाइब्रेरी है, यह तर्क एक BSTR तर्क बनाते हैं। फिर आपको उपयोगकर्ता को इसे ठीक से आवंटित करने की आवश्यकता होती है ('SysAllocString' के साथ) और आपको मिलान करने वाले डेलोकेटर का उपयोग करने की गारंटी है। अन्य विधियां सिर्फ ... खराब हैं। यदि आपके उपयोगकर्ता के पास एक अलग कंपाइलर है, तो आप 'malloc' –