मैं कुछ हद तक उलझन में हूं जब आप सी में एक चार सूचक पर स्ट्रोक को कॉल करते हैं। मुझे पता है कि यह स्ट्रिंग की सामग्री को संशोधित करता है, इसलिए यदि मैं 'लाइन' नामक चर पर स्ट्रोक को कॉल करता हूं, तो इसकी सामग्री बदल जाएगी। मान लें मैं bellow दृष्टिकोण का पालन करें:सी में स्ट्रोकोक का उपयोग कैसे करें ताकि कोई स्मृति रिसाव न हो?
void function myFunc(char* line) {
// get a pointer to the original memory block
char* garbageLine = line;
// Do some work
// Call strtok on 'line' multiple times until it returns NULL
// Do more work
free(garbageLine);
}
इसके अलावा मान से पहले यह myFunc को पारित कर दिया है कि 'लाइन' malloced है। क्या मुझे स्ट्रोक का उपयोग करने के बाद मूल स्ट्रिंग को मुक्त करना है या क्या यह हमारे लिए काम करता है? साथ ही, क्या होता है यदि 'लाइन' को मॉलोक नहीं किया गया है और मैं ऊपर दिए गए फ़ंक्शन का उपयोग करने का प्रयास करता हूं? क्या इसके बजाय निम्नलिखित करना सुरक्षित है? (मान लें प्रोग्रामर मुक्त फोन नहीं होगा वह जानता है कि अगर लाइन malloced नहीं है)
प्रार्थना किए
char* garbageLine = line;
myFunc(line);
free(garbageLine);
समारोह परिभाषा
void function myFunc(char* line) {
// Do some work
// Call strtok on 'line' multiple times until it returns NULL
// Do more work
}
+1 :-) –
ध्यान दें कि दूसरा दृष्टिकोण 'myFunc (line) में सरलीकृत किया जा सकता है; मुफ्त (रेखा); '- अस्थायी अनावश्यक है क्योंकि सूचक 'लाइन' को' myFunc()' मान द्वारा पारित किया जाता है। – caf
@caf आप निश्चित रूप से मान रहे हैं कि ओपी वास्तव में लाइन को malloced है, लेकिन यह कोड से स्पष्ट नहीं है। स्मृति आवंटन और विलोपन के बारे में स्पष्ट भ्रम को देखते हुए, धारणा की आवश्यकता नहीं है। –