Я хочу создать процесс с данными в 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;
}
Но в executor
У меня ошибка сегментации:
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;
}
Я знаю, что это произошло потому, что vector1
выходит за рамки, когда worker
функция заканчивается и vector1
исчез, так что «нет данных вектора1» в исполнителе.
Как это сделать правильно?
Я думаю, что вы просто хотите использовать указатель здесь 🙂
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;
}
Других решений пока нет …