为什么我在cin上遇到段错误?

iam*_*sgt 1 c++ cin segmentation-fault

我正在写一个相当简单的练习(家庭作业),并且大多数都有效,但是有时会在cin上出现段错误。这是相关的代码。

int main()
{
  std::string str = "";
  std::cout << "Please select the desired operation:\n";
  std::cout << "(A): Generate Decompositions\n";
  std::cout << "(B): Generate Acceptable Compositions from S1.txt and S2.txt\n";
std::cout << "cout"; //debug statement
  std::cin >> str;
std::cout << "cin"; //debug statement
  std::cout << str;
  char resp = str.at(0);
std::cout << "resp"; //debug statement

...
}
Run Code Online (Sandbox Code Playgroud)

我遇到了段错误std::cin >> str(我知道这是因为输出了“调试语句”)。但是奇怪的是,我只有在输入'b'时才能得到它。如果我输入“ a”或任何以“ a”开头的单词,则可以正常工作。如果我输入a或b以外的任何字母,或以a或b以外的其他字母开头的任何东西,它就会退出(如预期的那样)。但是,如果我输入“ b”或任何以“ b”开头的单词,则会出现Segfaults。每一次。为什么?

das*_*ght 6

我知道这是因为输出了什么“调试语句”

您发布的代码看起来不错。

由于您的输出语句没有<< endl结尾,因此某些输出可能仍会在segfault时被缓冲。写出endl块直到刷新输出,因此添加<< endl可能会帮助您更接近崩溃的实际位置。