वालग्रिंड एक सबस्ट्रोक आमंत्रण के साथ शिकायत कर रहा है।इस वालग्रिंड त्रुटि का कारण क्या है?
string Message::nextField(string& input) {
int posSeparator = input.find_first_of(SEPARATOR);
string temp;
temp = input.substr(0, posSeparator); //Error points to this line
input.erase(0, posSeparator + 1);
return temp;
}
त्रुटि चला जाता है: 12 ब्लॉकों में
290 बाइट्स निश्चित रूप से की 1 1
क्या समारोह मूल रूप से इनपुट को पार्स किया जाता है, विभाजक वर्ण द्वारा अलग स्ट्रिंग के कुछ भागों लौटने करता हार का रिकॉर्ड में खो जाते हैं। यह समारोह अगले परिभाषा के साथ एक और वर्ग की विधि से शुरू हो जाती है:
void doSomething(string input) {
input.erase(0,2);
string temp = nextField(input);
this->room = atoi(temp.c_str());
temp = input;
this->money = atoi(temp.c_str());
}
अजीब या बहुत महत्वपूर्ण यहाँ शामिल होने के लिए और कुछ नहीं है। मैं एक्लिप्स इंडिगो की वालग्रिंड प्रोफाइलिंग से वालग्रिंड के लिए डिफ़ॉल्ट सेटअप का उपयोग करता हूं। कोई विचार?
क्या आप संकलन के दौरान अनुकूलित कर रहे हैं? यदि हां, तो मत करो। यह valgrind से बहुत नकली रिपोर्ट का कारण बनता है। –
आप शायद 'स्ट्रिंग temp = input.substr (0, posSeparator) लिख सकते हैं;' इसे निर्दिष्ट करने के बजाय स्ट्रिंग को प्रारंभ करने के लिए। यह स्पष्ट नहीं है कि आपकी समस्या के साथ कुछ भी करना है। –
@ डेविड हैममेन नहीं, मैं नहीं हूं। – Erandros