2012-07-04 3 views
0

누군가가 나를 이해하는 데 도움이 될 수있는 매우 이상한 오류가 발생했습니다. 나는 범위 오류가 벡터를 벗어나지 않고 아주 일관되게 충돌하는 코드를 가지고있다. 이 오류에 대한 또 다른 이상한 점은 오류의 위치를 ​​고정시키려는 코드 전체에서 많은 cout 문을 던지면 충돌이 멈추는 것입니다.C++ : 코드에 try/catch를 추가하면 버그가 사라짐

try { 
    // my code that is presumably causing problems 
    } 
    catch (out_of_range& oor) { 
    cerr << "Out of Range error: " << oor.what() << endl; 
    } 

이 코드를 추가, 버그가 멀리 갈 것 같다

어쨌든, 추가 검사로, 내가 코드의 일부 주위에/catch 블록을 시도 넣어, 내 구현은 같은입니다. 더 이상 충돌은 없으며 나는 잡기에 cerr 메시지를 보지 못합니다.

이것이 가능한가?

+4

나는 관찰 할 때 버그가 사라질 때 일반적으로 초기화되지 않은 변수를 사용하고 있기 때문에 버그를 발견했습니다. 여분의 코드는 충돌을 막을만큼 메모리 위치를 이동시킵니다. –

+0

관찰 할 때의 동작 변경? 양자 역학이 다시 일어나야합니다. – chris

+1

경고 수준을 올리면 컴파일러에서 초기화되지 않은 변수 사용 및 기타 사항을 catch 할 수 있습니다. –

답변

1

디버거에서 이전 코드를 단계별 실행하고 오류를 찾아냅니다. 디버거에서 새 코드를 단계별로 실행하고 오류가없는 것으로 분리합니다. 답변을 보내거나 답변을 읽는 것보다 짧은 시간 내에 찾고있는 답변을 줄 것이므로 답변을 "답변"이라고 말하고 있습니다.

디버거 10 개 단어로 : -g로 컴파일, google "gdb cheatsheet", 아주 간단합니다.

+0

당신이 수축 *을 두 단어로 계산한다는 것은 흥미 롭습니다. 그 또는 당신은 2 개의 별도의 단어로서 * -g *에서 ndash와 'g'를 세었다. – dcow

+0

치트 시트는 2 단어이지만, 구 버전의 Google이 사용되는 경우에는 생략된다. gdb는 2 단어입니다. db는 "디버거"이고 g는 "gnu"라는 단어입니다. g는 "gnu 's Unix"를 의미하기 때문에 3 단어이고 1 단어가 아니고 유닉스는 1 단어이지만 gnu 's는 3 단어입니다 (수축이 "is"에 대한 단어를 추가하지 않기 때문에). 그리고 이제이 3 단어에서 gnu는 Stack Overflow를 얻습니다. –

+0

@Windowsprogrammer : 당신은 당신이 알고있는 것, 당신은 Windows 프로그래머입니다. * 오리 * – Ashe

관련 문제