我正在尝试使用用户输入字符串填充向量,每次运行程序并调用函数时,无论输入什么,我都会遇到分段错误。我相当缺乏经验,任何意见都表示赞赏。问题出在我的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] != " ");
};
答案 0 :(得分:0)
假设输入storage
时entry()
为空:
考虑第一个循环迭代。最初是i == 0
,然后您读取了一个字符串,push_back
将其读入storage
。然后你增加i
。现在i == 1
。
然后检查循环条件,其中storage[i]
,即storage[1]
被访问。索引1表示向量中的第二个元素,但您只插入了一个!
因此,此处有未定义的行为,这可能是分段错误的原因。
此外,如果您要检查输入的最后一件事是否为空,则需要针对""
进行测试,而不是" "
。后者不是空字符串,而是一个空格。有关其他建议,请参阅问题的评论。