나는 알아낼 수없는 매우 이상한 버그가 있습니다. 필자는 컴파일러가 내 진술을 재정렬하지 않는 한 코드의 작은 부분으로 좁혔습니다. 진술이 사실이 아니라고 생각합니다. 나는이 프로그램을 실행할 때매우 이상한 for 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 loop에 도달합니까?"라는 질문을하지 않습니다.
이상한 일은 내 프로그램이 작동하고 있다는 것입니다. (거의 전체 CPU 코어를 사용하고 있습니다 ...),하지만 끝나지 않고 그냥 멈 춥니 다.
나는 clang ++ 및 g ++을 사용해 보았습니다. 최적화를 사용하지 않았습니다. armadillo와 함께 부스트 라이브러리가 설치되어 있고 boost_program_options 부분을 사용하고 있습니다. 하지만 컴파일러가 일을 재정렬해야한다고 생각하지 않습니다 ...
for 루프 선언 내에서 cout 호출을 사용하거나 사용하지 않고 발생하며 루프를 건너 뛰지 않습니다.
벡터 "n"은 1 이상의 길이를 가지며 boost_program_options 호출로 제공됩니다.
아이디어가 있으십니까?
코드를 실행하고 예상대로 실행됩니다 (출력이'nothere 또는 heredo가 n 루프에 있습니까? 아니면 여기에 있습니다.). 이것은 아마 루프 안에서 또는 코드 상단의'... '에서 여러분이하고있는 일일 것입니다. –
내 추측에 따르면 그 일은 '...'입니다. 그것은 괜찮을지도 모르지만 출력을 내 보내지 않고 무한 루프에 빠지기 때문에 보이지 않습니다. - 이런 이유로'cerr'을 디버그 출력에 사용하십시오. – UncleBens