2016-09-25 5 views
0

저는 서로 가장 가까운 두 점과 그 사이의 거리를 찾는 분할 및 정복 알고리즘을 구현하고 있습니다. 최종 해결책은 (무차별 대항력과 비교하여) 정확한 답을 찾지 만, 시간의 약 1/3은 세분화 오류 오류를 반환합니다. 나는 며칠 동안이 문제를 해결하기 위해 일해 왔으며, 여기저기서 인쇄 문을 추가했지만 문제를 찾을 수 없었다. 누군가 내 코드를 살펴 본다면 고맙겠습니다.재귀 함수가 때때로 세분화 오류를 반환합니다.

+0

디버거에서 세그먼트 화 오류는 어디에 있습니까? – Cedric

+0

매번 동일한 입력 데이터 또는 다른 데이터 사용? 함수가 재귀적일 경우 스택 공간이 부족할 수 있습니다. 스택을 증가 시키면 프로그램이 충돌하는 데이터가 다시 실행됩니다. – iksemyonov

+0

@Cedric은 디버거를 시험해 보았는데 'for (j = i + 1; j Novice

답변

2

"나누기"루프는 XY이 같은 수의 요소를 사용한다고 가정합니다. Y의 숫자가 X 미만인 경우 정의되지 않은 동작이 발생하여 재미없는 결과 또는 충돌이 발생할 수 있습니다.

+0

을 제안 할 수 있습니다. 대체 될 몇 줄, 주석 처리 된 교체 (왜 필요한지) –

+0

의미가 있습니다. 루프를 두 개로 나눠 보았습니다 : 하나는'Y' (조건)'i Novice

0

벡터에 대한 액세스 방법을 변경해보십시오. Vector subscript-operator는 일부 컴파일러/플랫폼에서 에라틱 한 동작을하는 것처럼 보입니다 (적어도 내 관점에서는). 나는이 문제가 링크리스트가되어 메모리에서 연속적이지 않은 결과를 얻는다 고 생각하지만, 그것은 단지 추측이다. (편집 : 표준 : : 벡터 메모리에 인접, 문제는 뭔가 다른 것입니다) 등, (쉬운 peasy auto 키워드) 대신에 반복자를 사용해보십시오 :이 사건에 대한 작동

for (auto iter = Yprime.begin(); iter != Yprime.end(); iter++) { 
    // Your code here 
} 

희망을!

+0

방금 ​​내 게시물을 편집 한 후 귀하의 코멘트를 보았습니다. 미안합니다. 하지만, 나는 명시 적으로 ** 말했다. "하지만 그것은 단지 추측입니다. ** **. 그래서 나는 틀린 말을하는 것이 틀 렸습니다. LLVM에서 첨자 연산자를 사용하여 세분화 오류가 발생했습니다. – Cedric

+0

제안 해 주셔서 감사합니다. 이런 식으로 내 코드를 다시 구현하는 데는 시간이 걸렸습니다. 그럼에도 불구하고 여전히 같은 오류가 발생했습니다 ... – Novice

+0

죄송합니다 ... 한 번 비슷한 문제가 있었지만 문제가 해결되었습니다 ... 그렇지 않으면 내가 본 유일한 또 다른 사실은 'abs (Y [i ] .x - mid.x) Cedric

관련 문제