2016-10-05 2 views
0

Ich möchte einen Prozess mit Daten in SimGrid erstellen, so dass ich dies tun:Wie erstellt man einen Prozess mit Vektor in SimGrid?

int worker(int argc, char *argv[]) 
{ 
    vector<string> vector1; 
    vector1.push_back("word"); 
    MSG_process_create("x", executor, &vector1, MSG_host_self()); 
    return 0; 
} 

Aber in executor ich einen Segmentation Fehler haben:

int executor(int argc, char* argv[]){ 
    MSG_process_sleep(10); 
    vector<string> *data = (vector<string>*) MSG_process_get_data(MSG_process_self()); 
    XBT_INFO("%s", data->front().c_str()); 
    return 0; 
} 

Ich weiß, dass es passiert ist, weil vector1 aus geht der Bereich, wenn worker Funktion endet und vector1 verschwand, so "es gibt keine Vektor1 Daten" in Executor.

Wie wird es richtig gemacht?

Antwort

1

Ich glaube, Sie wollen einfach nur hier einen Zeiger verwenden :)

int worker(int argc, char *argv[]) 
{ 
    vector<string>* vector1 = new vector<string>(); 
    vector1->push_back("word"); 
    MSG_process_create("x", executor, vector1, MSG_host_self()); 
    return 0; 
} 

int executor(int argc, char* argv[]){ 
    MSG_process_sleep(10); 
    vector<string> *data = (vector<string>*) MSG_process_get_data(MSG_process_self()); 
    XBT_INFO("%s", data->front().c_str()); 
    delete data; 
    return 0; 
} 
Verwandte Themen