私は私が把握することができない非常に奇妙なバグを持っています。コンパイラが私のステートメントを並べ替える場合を除いて、私はそれをコードの小さな部分に絞り込んだ。私はそれが真実ではないと信じている。forループの初期化で非常に奇妙なハング
...
std::cout << "here"<< std::endl;
std::vector<int>::iterator n_iter;
std::vector<int>::iterator l_iter;
std::cout << "here?" << std::endl;
for(n_iter = n.begin(), std::cout << "not here" ; std::cout << "or here" && n_iter < n.end(); n_iter++)
{
std::cout << "do i get to the n loop?";
...
}
私はこれを実行すると、私は2番目、「ここで」最初の参照「ここに?」が、私は「ここにいない」または「またはここでは、」出力得ることはありません。そして、私は間違いなく "私はnループに行くのですか?"
奇妙なことは私のプログラムが動作していることです(CPUコア全体をほぼ使用しています...)。しかし、それは終了しません。ちょうどハングします。
私はclang ++とg ++を使ってみましたが、私は最適化を使用していません。私はboost_program_optionsの一部を使用して、ブーストライブラリをインストールしています(とarmadilloと一緒に)。しかし、私は、コンパイラは
それはとか、forループ宣言の内部coutの呼び出しなしで起こり、そしてそれだけでループをスキップしていません...物事の順序を変更する必要があるとは思いません。
ベクトル「n」は、少なくとも1の長さを有し、boost_program_optionsコールによって与えられます。
アイデア?
私はあなたのコードを実行し、予想通り、それは(私は、n個のループ?またはhere'に着く出力 'ないhereor heredoを取得)を実行します。おそらく、ループの内側やコードの最上部にある '...'でやっていることでしょう。 –
私の推測では、それはそれをやっている '...'です。物事をうまく説明するかもしれませんが、出力をフラッシングしないで無限ループに入るので、あなたはそれを見ません。 - このため、デバッグ出力には 'cerr'を使います。 – UncleBens