矢量后推上的分段错误

时间:2016-10-17 05:24:35

标签: c++

我正在尝试使用用户输入字符串填充向量,每次运行程序并调用函数时,无论输入什么,我都会遇到分段错误。我相当缺乏经验,任何意见都表示赞赏。问题出在我的entry()函数中,每次我尝试输入一个字符串时我的程序崩溃了。我想知道为什么每次都在同一个位置看到分段错误。我错过了一些明显的东西吗?

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>

class Interface   
{
private:
    std::vector<std::string> storage;
    std::vector<bool> flag;
int i;
std::string temp;
//temp
int t;
public:
void entry();
void display();
void remove();
void complete();
void exit();
void recursiveBonus();

};

void Interface::entry()
{
i = 0;
do
{
    std::cout << "Please enter a task:" << std::endl;
    getline(std::cin, temp);
    storage.push_back(temp);
    flag.push_back(false);
    i++;
}while(storage[i] != " ");
};

1 个答案:

答案 0 :(得分:0)

假设输入storageentry()为空:

考虑第一个循环迭代。最初是i == 0,然后您读取了一个字符串,push_back将其读入storage。然后你增加i。现在i == 1。 然后检查循环条件,其中storage[i],即storage[1]被访问。索引1表示向量中的第二个元素,但您只插入了一个! 因此,此处有未定义的行为,这可能是分段错误的原因。

此外,如果您要检查输入的最后一件事是否为空,则需要针对""进行测试,而不是" "。后者不是空字符串,而是一个空格。有关其他建议,请参阅问题的评论。