为什么我会对cin进行段错误?

时间:2013-04-26 02:13:07

标签: c++ segmentation-fault cin

我正在写一个相当简单的练习(家庭作业),其中大部分都有效,但是有时段落在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

...
}

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

1 个答案:

答案 0 :(得分:4)

  

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

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

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