2016-03-01 6 views
6

सी (मॉलोक के माध्यम से) में फ़ंक्शन निष्पादित करने के बाद आवंटित स्मृति को खाली करने का सही तरीका क्या है? मुझे स्मृति आवंटित करने की ज़रूरत है, इसे किसी भी तरह इस्तेमाल करें और इसे वापस करने के बजाय इसे वापस लौटाएं।फ़ंक्शन के अंत के बाद "मुक्त" चर कैसे करें?

char* someFunction(char* a, char* b) { 
    char* result = (char*)malloc(la + 2 * sizeof(char)); 
    ... 
    return result; 
} 
+9

'चार * str = someFunction (क, ख) ; useitsomehow (एसटीआर); मुफ्त (str); ' –

+0

अच्छा, इसका मतलब है कि मैं सूचक वापस कर दूंगा, जो" str "के रूप में मुक्त होने के लिए उपलब्ध है क्योंकि यह अब बिल्कुल एक ही सूचक है? – JaxCze

+3

@ जैक्सकेज: हाँ, मैं इसे "बिल्कुल वही सूचक" नहीं कहूंगा। यह बिल्कुल एक ही मूल्य के साथ एक अलग (सूचक) चर है, यानी एक ही वस्तु को इंगित करता है। –

उत्तर

5

free का उपयोग करें। आपके मामले में, यह हो जाएगा:

char* result = malloc(la + 2 * sizeof(char)); 
... 
free (result); 

इसके अलावा, आप आबंटित स्मृति लौट रहे हैं तो strdup करता है की तरह, अपने समारोह के फोन करने वाले स्मृति मुक्त करने के लिए। जैसा:

result = somefunction(); 
... 
free (result); 

आप इसे लौटने के बाद यह मुक्त कराने की सोच रहे हैं, यह संभव नहीं है। एक बार जब आप return फ़ंक्शन से कुछ लेते हैं, तो यह स्वचालित रूप से समाप्त हो जाता है।

+3

यह कोड स्निपेट ऐसा दिखता है स्केची, मुझे उम्मीद है कि कोई गलतफहमी नहीं है: आपको इसे वापस करने से पहले ** ** ** मुक्त नहीं होना चाहिए! – Marco13

3

यदि आप आवंटित स्मृति लौटाते हैं, तो यह कॉल करने की कॉलर ज़िम्मेदारी है।

char *res; 
res = someFunction("something 1", "something 2"); 
free(res); 
6
कोड कि someFunction कहा जाता है

तुम भी दस्तावेज में स्पष्ट करना है (आपको लगता है कि, है ना ?! है), फोन करने वालेfree कॉल करने के लिए है, के बाद वापसी मान का उपयोग कर समाप्त हो गया।

3

ठीक है आप return इसे फ़ंक्शन कॉल करने के लिए, तो केवल free कॉलिंग फ़ंक्शन में पॉइंटर।

3

आप का मतलब है कि दिए गए मान बुला समारोह में की जरूरत नहीं है और समारोह में कहा जाता है इसके दुष्प्रभाव के कारण है तो आप बस लिख सकते हैं

free(someFunction(p, q)); 
+0

मेरा मतलब यह नहीं था कि इस तरह, लेकिन यह टिप मेरे लिए उपयोगी होगी :) धन्यवाद – JaxCze

संबंधित मुद्दे