0

私のはるかに長いプログラムからのコードのこの特定のチャンクは、クラッシュし続けます。それはうまくコンパイルされますが、Windowsはそれを終了します。

 out_stream_names.open("names.dat");
 for(int i = a.size(); i>0 ; i=i-1)
       {
             out_stream_names << a[i] << endl;
       }
 out_stream_names.close();

なぜクラッシュし続けるのかを突き止めたいと思います。コードをコピーするよう求めているわけではありません。ありがとう。

4

3 に答える 3

5

非常に少ない情報。しかし、最初に頭に浮かぶのは、a.size()

試す:

 out_stream_names.open("names.dat");
 for(int i = a.size()-1; i>=0 ; i=i-1)
       {
             out_stream_names << a[i] << endl;
       }
 out_stream_names.close();

トラバーサルの場合は奇数インデックスである偶数インデックスのみで出力が必要なため、次を使用します。

if(i&1) out_stream_names << a[i] << endl;
于 2013-02-26T03:20:21.320 に答える
2

次の順序で何かを使用して、この種の問題を回避することをお勧めします。

std::copy(a.rbegin(), a.rend(), 
          std::ostream_iterator<a::value_type>(out_stream_names, "\n"));

おまけとして、この場合、パフォーマンスが少し向上する可能性があります ( に置き換えるendlことで\n、記述した名前ごとにストリームがフラッシュされるのを回避できます)。

[そのままではコンパイルされないことに注意してくださいa::value_type-- 実際の型を指定する必要があります]。

于 2013-02-26T03:35:09.773 に答える
1
out_stream_names.open("names.dat");
for(int i = a.size() - 1; i >= 0; --i) 
{
   out_stream_names << a[i] << endl;
}
out_stream_names.close();

?? それを試してみてください!

于 2013-02-26T03:22:07.787 に答える