我有一個很奇怪的錯誤,我似乎無法弄清楚。我把它縮小到一小段代碼(除非編譯器重新排序我的語句,我不相信這是真的)。非常奇怪的掛在一個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?";
...
}
當我運行此,我首先看到的「這裏」,第二個「在這裏嗎?」,但我不明白的「不在這裏」或「這裏或」輸出。而且我絕對不會得到「我到達n循環嗎?」。
奇怪的是,我的程序工作(這幾乎用了整個CPU核......),但它並沒有結束,它只是掛起。
我試過使用鏗鏘聲++和g ++,而我沒有使用任何優化。我已經安裝了boost庫(並使用boost_program_options部分)以及犰狳。但我不認爲編譯器應該被重新排序的東西...
碰巧使用或不使用for循環聲明裏面的cout調用,它不只是跳過循環。
矢量「n」的長度至少爲1,並且由boost_program_options調用給出。
任何想法?
我跑你的代碼,它運行正常(我得到的輸出'不hereor heredo我到n個循環?或here')。這可能是你在循環內部或代碼頂部的'...'內所做的事情。 –
我的猜測是它是這樣做的......。它可以確定一些事情,但是你沒有看到它,因爲它會在沒有刷新輸出的情況下進入一個無限循環。 - 出於這個原因,使用'cerr'作爲調試輸出。 – UncleBens