2016-05-26 1 views
-3

初期化されたオブジェクトを持つオブジェクトのベクトルを埋め込む関数を作成しようとしています。 助けてください。 ERROR:セグメンテーション障害(コアダンプ)コード内でセグメンテーションエラーを取得する

EDIT:OBJにアクセスしようとしたとき

[OK]をので、問題が[0] .ageラインで発生しているように見えます。

また、Point2d関数は、私が追加するForvoCライブラリから来ているのを忘れていましたが、何らかの形でエラーに寄与していないようです。

#include <iostream> 
#include <vector> 

struct objtracker 
{ 

int age; 
vector<int> frID; 
vector<Point2d> cent; 
    objtracker() 
    { 
     age = 1;   
    } 
    ~objtracker() 
    { 
    // Destroy ObjectTracker 
    } 
}; 

vector<objtracker> OBJ; 

void create_new_tracker(vector<objtracker> OBJ,Point2d cent,int frameID,objtracker O){ 


    O.cent.push_back(cent); 
    O.frID.push_back(frameID); 


} 
int main(){ 

    Mat Y; 
    Y = imread("hor.jpeg",CV_LOAD_IMAGE_COLOR); 
    Point2d J; 

    J.x = 100; 
    J.y = 100; 
    int frameID = 100; 
     objtracker O; 
     create_new_tracker(OBJ,J,frameID,O); 
     create_new_tracker(OBJ,J,frameID,O); 
     create_new_tracker(OBJ,J,frameID,O); 
     create_new_tracker(OBJ,J,frameID,O); 
     create_new_tracker(OBJ,J,frameID,O); 

    cout<<OBJ[0].age<<"\n"; 

return 1; } 
+0

のようなものは、あなたがとても親切だろうことがあります 値によって渡されると、それは反映されませんやりたいことやクラッシュする場所? – Quentin

+0

変更を受け入れる:-)古い学校のやり方はまだ変わっていませんが、図書館はそれをより簡単にするはずです。 – Stefan

+1

パラメータ 'objtracker O' - これは* value *パラメータになります。呼び出し元のベクトルは空のままです。そして、このコードでは 'OBJ'には* anything *が決して置かれないので、私は添え字演算子の不具合は驚いていません。 [良いC++の本](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を提案し、いくつかの再立ち上げ時間は順番になるでしょうか? – WhozCraig

答えて

1
void create_new_tracker(vector<objtracker> OBJ,Point2d cent,int frameID,objtracker O){ 
O.cent.push_back(cent); 
O.frID.push_back(frameID); 
} 

あなたはこの関数内OBJに任意のobjtracker'sを追加することはありません。 そして、あなたがやった場合でも、あなたがあなたのコードが何であるかの有益な説明をあなたの暴言を交換するよう

 void create_new_tracker(vector<objtracker> &OBJ,Point2d cent,int frameID,objtracker O) 
     { 
     O.cent.push_back(cent); 
     O.frID.push_back(frameID); 
     OBJ.push_back(O); 
     } 
+0

それで参考にしてください。 – MyBushisaNeonJungle

+0

@ user6334139私は自分の答えを編集しました –

関連する問題