मानक केवल इतना कहता है कि स्ट्रिंग अक्षर में स्थिर भंडारण अवधि है, जिसका अर्थ यह है कि चर का जीवनकाल समाप्त होने तक प्रोग्राम समाप्त होता है और प्रोग्राम शुरू होने पर इसे प्रारंभ किया जाता है।
[...] multibyte चरित्र अनुक्रम तो स्थिर भंडारण अवधि और लंबाई सिर्फ अनुक्रम को शामिल करने के लिए पर्याप्त की एक सरणी प्रारंभ करने में प्रयोग किया जाता है: C11 draft standard के प्रासंगिक अनुभागों 6.4.5
पैरा है। [...]
यह केवल पढ़ने की स्मृति में हो सकता है और संभवतः यह कार्यान्वयन परिभाषित किया गया है। इसे मुक्त करने की आवश्यकता नहीं है, केवल malloc
के माध्यम से गतिशील रूप से आवंटित स्मृति को free
पर बाद की कॉल की आवश्यकता है।
अगर मैं इस कार्यक्रम का उपयोग करें:
int main()
{
const char * ptr = "String one";
return 0;
}
और हम gcc
साथ इसे बनाने और उसके बाद का उपयोग objdump
:
objdump -s -j .rodata a.out
हम चाहते हैं कि मिल जाएगा इस मामले में यह वास्तव में केवल पढ़ने में संग्रहित है डेटा अनुभाग:
Contents of section .rodata:
400580 01000200 53747269 6e67206f 6e6500 ....String one.
आप इसे स्वयं चला सकते हैं here
स्रोत
2013-08-01 20:09:03
स्ट्रिंग अक्षर स्थिर आवंटन हैं। उन्हें मुक्त होने की आवश्यकता नहीं है। –
इस प्रश्न को भी जांचें: [क्या मुझे स्ट्रिंग-लिटरल्स का उपयोग करके प्रारंभ * प्रारंभ करना चाहिए?] (Http://stackoverflow.com/questions/9504588/should-i-free-char-initialized-using-string-literals) – sidyll
क्यों इसे मुक्त किया जाना चाहिए? सूचक केवल एक अलग स्ट्रिंग को शाब्दिक इंगित करता है और स्वीकृत उत्तर में समझाया गया है कि स्ट्रिंग अक्षर में स्थाई भंडारण अवधि होती है, इसलिए वे मुक्त नहीं होते हैं। – 0decimal0