从成员函数打印 vector<int> 元素时出现 C++ 段错误
Posted
技术标签:
【中文标题】从成员函数打印 vector<int> 元素时出现 C++ 段错误【英文标题】:C++ seg fault when printing a vector<int> element from a member function 【发布时间】:2016-12-07 22:59:31 【问题描述】:我有一个带有 int 向量数据成员的类。我将向量初始化为 26 个元素,所有元素在构造函数中的值为 -99。我可以在构造函数中计算元素 0 并打印“-99”。然后构造函数调用另一个不修改向量的成员函数,但是当我尝试从该函数中计算元素 0 时,我得到了分段错误。下面我发布了标题相关部分和两个成员函数的屏幕截图。具体来说,代码按发布的方式工作,但如果我将第 26 行移至第 46 行,我会遇到段错误。有什么有用的建议吗?谢谢!
头文件:
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();
构造函数和它调用的成员函数(解析)。将第一个 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;
【问题讨论】:
请将代码发布在问题中,而不是在外部链接上,尤其是不是图片。 好的,我会努力解决的 ^---- 不是所有的代码也不是任意的sn-p,而是minimal reproducible example拜托! 很抱歉这么苛刻,但是您对问题的关注越多,就会有更多的人愿意回答。你把你放进去的东西拿出来。 这是人们点击随机链接的最后一个网站 【参考方案1】:您在构造函数中定义了一个名为“assignments”的局部向量,它隐藏了具有相同名称的数据成员,因此数据成员“assignments”的长度可能仍然为零,因此出现 seg 错误。
【讨论】:
【参考方案2】:改变
while((s[i] != ';')&&(i < length))
到
while(i < length && s[i] != ';')
在您的版本中,如果s
为空或i
已经大于length
,您将获得 AV 或段错误。
另外,停止命名变量temp
。
【讨论】:
我不知道我可以以这种格式列出多个条件!这会清理我的很多代码,谢谢!以上是关于从成员函数打印 vector<int> 元素时出现 C++ 段错误的主要内容,如果未能解决你的问题,请参考以下文章
vector<int>v的v.at(100)函数与v[100] 有何不同
剑指offer系列——59/60.按之字形顺序打印二叉树/把二叉树打印成多行