Valgrind报告了一个substr函数的问题。
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;
}
错误信息如下:
在 1 of 1 的损失记录中,12 个块中的 290 字节肯定已经丢失。
这个函数的作用基本上是解析输入,返回由 SEPARATOR 字符分隔的字符串部分。该函数从另一个类的方法中调用,其定义如下:
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());
}
这里没有其他奇怪或重要到足以被包含的东西。 我使用Eclipse Indigo的Valgrind分析中默认设置的Valgrind配置。 有什么想法吗?
string temp = input.substr(0, posSeparator);
来初始化字符串,而不是赋值。虽然这与你的问题似乎没有直接关系。 - Jonathan Leffler