2013-03-19 3 views
0

유전자 알고리즘 프로그램이 있으며, 모든 것은 벡터를 사용하여 동적으로 할당됩니다. 컴파일 타임에 세대 당 세대 수나 세대 수는 아무데도 없습니다.벡터의 첨자가 때때로 범위를 벗어납니다.

500, 1000, 2000 세대를 사용해 보았는데 완벽하게 실행됩니다. 그런 다음 1 만 세대를 시험했습니다. 그것은 나에게 디버그 단언 실패, 벡터 첨자가 4966 세대에서 범위를 벗어났습니다.

동일한 매개 변수 10,000 번을 사용하여 두 번 다시 시도했지만 정상적으로 실행되었습니다.

나는 가끔 오류를 얻을, 그것은 한 번 더, 나는 세대 7565.

그것은 때로는 완벽하게 작동하는지 이상한에서 오류가 발생했습니다 시도했다. 특히 모든 것을 벡터를 사용하여 수행하는 것을 고려하십시오.

어디에서 문제가 발생했는지에 대한 아이디어가 있습니까? 어쩌면 디버그 모드가 어떤 이유로 버그가있을 수 있습니까?

+6

문제는 코드의 버그에서 비롯됩니다. 코드를 보지 않고서 무엇이 될지 추측하기는 어렵습니다. – john

+0

벡터를 제로 초기화 하시겠습니까? 그렇지 않은 경우 무작위 데이터를 기반으로 의사 결정을 내릴 수 있습니다. 아마도 Valgrind를 사용합니까? – RichieHindle

+2

"때로는 완벽하게 작동하고 때로는 오류가 발생하는 것이 이상합니다."- 그렇지 않습니다. 나는 벌레들과 함께 많은 것을 가지고있다. 우리에게 코드를 보여주십시오. –

답변

1

이 문제는 스택 손상 또는 인덱스 외부의 액세스로 인한 것일 수 있습니다. 코드가 충돌하는 경우가 있다는 사실은 잘못된 것이 있음을 나타냅니다. 코드가 멀티 스레드 인 경우 문제는 액션이 ​​지정된 순서로 실행되면 코드가 벡터의 범위를 벗어나는 값에 액세스하려고하기 때문에 문제 일 수 있습니다.

내 충고는 코드를 valgrind을 사용하여 실행하고 이것이 무엇을 말하는지 확인하는 것입니다. 일반적으로 비슷한 문제를 해결하는 데 도움이됩니다.

코드가 충돌하지 않는 경우가 있다고해서 그것이 완벽하게 작동한다는 것을 의미하지는 않습니다. 스택 손상 또는 유사한 문제가 발생할 수 있습니다.

관련 문제