नीचे दिए गए कोड के लिए: (1) "मुख्य" एक फ़ंक्शन "f1" कहता है। (2) फ़ंक्शन "एफ 1" कुछ संख्या क्रंचिंग करता है; malloc के साथ "char" की एक सरणी बनाता है और फिर, सरणी के सूचक को मुख्य पर लौटाता है (बिना आवंटन-मुक्त-सरणी के)।क्या फ़ंक्शन में आवंटित स्मृति अभी भी फ़ंक्शन रिटर्न के बाद आवंटित रहती है?
मैं 3 मामले से संबंधित प्रश्न हैं:, (1) मुझे लगता है हालांकि समारोह "F1" समाप्त कर दिया है, आवंटित चार सरणी अभी भी जब तक मुख्य कार्यक्रम पूरी तरह से समाप्त हो जाता है आवंटित रहता है। यही है, आवंटित स्मृति अभी भी मुख्य से संबंधित है और कोई अन्य प्रक्रिया इसे बाहर से (मेरा मतलब है, हस्तक्षेप नहीं कर सकती)। क्या मैं सही हू? (2) क्या प्रोग्राम समाप्त होने से पहले मुझे सरणी ("एफ 1" में आवंटित) को मुक्त करना होगा (या जैसे ही यह मुख्य प्रोग्राम समाप्त हो जाता है)? (3) यदि दूसरे प्रश्न का उत्तर "हां" है तो आप किसी अन्य फ़ंक्शन में आवंटित सरणी को कैसे मुक्त करते हैं?
नोट: मैं शुद्ध सी की सीमाओं के भीतर रहना चाहता हूं और सी ++ तक नहीं पहुंचना चाहता हूं।
char *f1 (...) {
...
...
char *fTmp = malloc (length1 * sizeof (char));
char *fData = malloc (length2 * sizeof (char));
...
...
free (fTmp);
return (fData);
}
int main() {
char *fData = f1 (...);
...
return (0);
}
मैं वही कर रहा था; यानी, मैंने सरणी को एक प्रक्रिया में मुक्त कर दिया है जो कि किसी अन्य प्रक्रिया में बनाया गया है ** ** के माध्यम से पॉइंटर का उपयोग करके। मुझे यकीन नहीं था कि मैं जो कर रहा हूं वह सही तरीका था। तो, आपका दृष्टिकोण निकटतम उत्तर लगता है: "यह अच्छा है जब स्मृति आवंटित करता है, यह भी मुक्त होता है। यदि यह संभव नहीं है तो कॉलर ऐसी स्मृति के लिए जिम्मेदार बन जाएगा।" – ssd
@ merkez3110 लेकिन आप प्रक्रियाओं के बीच पॉइंटर्स साझा नहीं कर सकते (जब तक कि आप सुरक्षित वर्चुअल मेमोरी के बिना किसी वातावरण में नहीं चल रहे हों)। –
गलत शब्दावली का उपयोग करने के लिए मुझे क्षमा करें: "प्रक्रिया"। ऊपर मेरी टिप्पणी में, मैं वास्तव में एक ही कार्यक्रम के भीतर अलग-अलग "कार्यों" का मतलब था, अलग-अलग प्रक्रियाओं में नहीं। सभी के लिए धन्यवाद। – ssd