2017-11-09 7 views
0

코드를 실행할 때 segfault가 수신되었습니다. 코드에 for 루프가 포함되어 있고 더 작은 반복을 위해 프로그램을 실행할 때 세그먼트 화 오류가 나타나지 않습니다. 큰 루프에 대한 코드를 실행할 때 나타납니다. 문제가 발생 미상 어디 확인하기 위해 디버거를 사용 :벡터를 사용하는 C++ 프로그램의 세그먼트 오류

Program received signal SIGSEGV, Segmentation fault. 
0x00000000004062d0 in std::vector<int, std::allocator<int> >::push_back (
    this=0x64dc08, [email protected]: 32) 
    at /usr/include/c++/5/bits/stl_vector.h:915 
915  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) 

그것은 무엇을 의미 하는가? 아는 사람 있나요? box_new의 값이 경계를 벗어나 있기 때문에

int box_new = getBoxID(x[i],y[i],R0,nbox); 
      if(bx[i] != box_new) 
       { 
       vector<int>::iterator position = std::find(box_particles[bx[i]].begin(), box_particles[bx[i]].end(), i); 
       if (position != box_particles[bx[i]].end()) // .end() means the element was not found 
        box_particles[bx[i]].erase(position); 
       bx[i] = box_new; 
       box_particles[box_new].push_back(i); 
       } 
+0

* 코드에 for 루프가 포함되어 있습니다. * 루프를보고 싶습니다. –

+0

코드 게시가 도움이 될 수 있습니다. 그러나 벡터의 크기를 지나서 접근하려는 것 같습니다. – kjpus

+0

코드의 어느 부분인지는 알 수 없습니다. 잘못의 라인을 어떻게 찾을 수 있습니까? @kjpus –

답변

0

하면, 즉, 그것이 초과이거나 그런 box_particles 또는 0보다 작은 손상의 크기와 동일 할 수있다 : 코드 에러 코드의 일부에 관련 발생하고 segfault.

box_new[0, box_particles.size())인지 확인하십시오. 이 범위는 각 반복마다 변경 될 수 있습니다.

+0

코드를 지금 추가합니다 –

+0

코드에 더 많은 것들이 있지만 무시했습니다. –

+0

루프의 첫 번째 계산 시간이 아닌 일부 시간이 지나면 오류가 발생합니다. –