Как создать процесс с вектором в SimGrid?

Я хочу создать процесс с данными в 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» в исполнителе.

Как это сделать правильно?

0

Решение

Я думаю, что вы просто хотите использовать указатель здесь 🙂

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]