首页 文章

从成员函数打印vector <int>元素时出现C seg错误

提问于
浏览
-1

我有一个带有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 回答

  • 0

    您已在构造函数中定义了一个名为“assignments”的本地向量,该向量将使用相同的名称隐藏数据成员,因此数据成员“assignments”可能仍然具有零长度,因此seg错误 .

  • 1

    更改

    while((s[i] != ';')&&(i < length))
    

    while(i < length && s[i] != ';')
    

    在您的版本中,如果 s 为空或 i 已经大于 length ,您将获得AV或段错误 .

    另外,停止命名变量 temp .

相关问题