2017-11-09 20 views
0

コード実行中にsegfaultを受け取りました。コードにはforループが含まれており、小さな反復のプログラムを実行するとセグメント化エラーは表示されません。大きなループのコードを実行すると表示されます。 私は、問題が発生したDOEどこをチェックするためにデバッガを使用:ベクトルを使用する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の値は、それがbox_particlesのサイズまたはその後0より小さい破損より大きいか等しいとすることができる、すなわち、結合の外にあるので

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

:符号誤りは、コードのこの部分に関連しています発生し、 segfault。

box_new[0, box_particles.size())の範囲にあることを確認してください。この範囲は各反復で変更されることに注意してください。

+0

コードを今すぐ追加します –

+0

コード内にもっと多くのものがありますが、私はそれらを無視しました –

+0

ループの最初の計算ではなく、ある時間が経過したときにエラーが発生します –

関連する問題