我有一个带有int矢量数据成员的类 . 我将向量初始化为26个元素,构造函数中的值均为-99 . 我可以在构造函数中输入元素0并打印“-99” . 然后构造函数调用另一个不修改向量的成员函数,但是当我尝试从该函数中输出元素0时,我得到了一个分段错误 . 下面我发布了 Headers 相关部分和两个成员函数的截图 . 具体来说,代码的工作方式是已发布,但如果我将第26行移到第46行,则会出现seg错误 . 任何有用的建议?谢谢!
头文件:
class Seq
{
private:
vector<int> assignments;
string original;
vector<Expression> sequence;
bool valid;
public:
void print_assignments();
Seq();
Seq(const string& s);
void parse(const string s, int);
vector<Expression> get_sequence();
void display_sequence();
void evaluate();
Constructior和它调用的成员函数(parse) . 将第一个cout语句移动到第二个cout语句下面的行会导致错误 .
Seq::Seq(const string& s)
{
original = s;
vector<int> assignments(26, -99);
parse(s, s.size());
cout << assignments[0] << endl;
}
void Seq::parse(const string s, int length)
{
Expression e;
string temp1, temp2;
int i = 0;
while((s[i] != ';')&&(i < length))
{
i++;
}
if(i>0)
{
temp1 = s.substr(0, i);
e.set(temp1);
sequence.push_back(e);
if(sequence.back().get_type() == 0)
{
cout << sequence.back().get_token(0).get_token()[0] << endl;
}
}
2 回答
您已在构造函数中定义了一个名为“assignments”的本地向量,该向量将使用相同的名称隐藏数据成员,因此数据成员“assignments”可能仍然具有零长度,因此seg错误 .
更改
至
在您的版本中,如果
s
为空或i
已经大于length
,您将获得AV或段错误 .另外,停止命名变量
temp
.