2016-05-26 12 views
-3

Der Versuch, eine Funktion zu erstellen, die einen Vektor von Objekten mit initialisierten Objekten füllen wird. Bitte helfen. ERROR: Segmentation fault (core dumped)Segmentierungsfehler im Code erhalten

EDIT:

Ok so, auftretendes Problem in der Linie zu sein scheint, wenn man versucht OBJ [0] .age zuzugreifen.

Auch vergessen, die Point2d-Funktion kommt von OpenCV-Bibliotheken, die ich hinzufügen, aber sie scheinen nicht dazu beitragen, den Fehler in keiner Weise.

#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

Sie so freundlich Wäre als rant eine nützliche Beschreibung zu ersetzen, was Ihr Code soll es tun und wo es abstürzt? – Quentin

+0

Umarmen Sie die Änderung :-). Übrigens funktioniert der alte Schulweg immer noch, aber die Bibliotheken sollten es dir leichter machen. – Stefan

+1

Parameter 'objtracker O' - das wäre ein * Wert * Parameter. Der Vektor des Aufrufers bleibt ziemlich leer. Und 'OBJ' wird nie mit * irgendetwas * in diesem Code aufgefüllt, also bin ich nicht überrascht, dass der Subscript Operator Fehler hat. Schlagen Sie [ein gutes C++ Buch] vor (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) und eine gewisse Zeit für das erneute Hochfahren wäre in Ordnung? – WhozCraig

Antwort

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

Sie nie objtracker's zu OBJ innerhalb dieser Funktion hinzuzufügen. Und selbst wenn Sie getan haben, wird es nicht berücksichtigt werden, da sie von Wert übergeben wird Sie so etwas wie

wollen vielleicht
 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

So übergeben Sie es als Referenz? – MyBushisaNeonJungle

+0

@ user6334139 Ich habe meine Antwort bearbeitet –