1

私はかなり単純な演習 (宿題) を書いていますが、ほとんどは機能しますが、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」で始まる任意の単語を入力すると、Segfault が発生します。毎回。なんで?

4

1 に答える 1

7

「デバッグステートメント」が出力されるため、これを知っています」

あなたが投稿したコードはうまく見えます。

出力ステートメントには最後がないため<< endl、segfault 時に出力の一部がまだバッファリングされている可能性があります。出力がフラッシュされるまでブロックを書き出すendlため、追加する<< endlとクラッシュの実際の場所に近づくのに役立つ可能性があります。

于 2013-04-26T02:42:50.357 に答える