在代码中获取分段错误

时间:2016-05-26 08:13:15

标签: c++ vector error-handling

尝试创建一个函数,该函数将使用初始化对象填充对象矢量。 请帮忙。 错误:分段错误(核心转储)

编辑:

好的,试图访问OBJ [0] .age时,问题似乎出现在行中。

还忘记了Point2d函数来自OpenCV库我想要添加,但它们似乎没有任何方式导致错误。

#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;   }

1 个答案:

答案 0 :(得分:1)

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

您永远不会在此功能中向objtracker's添加任何OBJ。 即使你这样做了,它也不会被反映,因为它是通过价值传递的 你可能想要像

这样的东西
      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);
       }