- int argc_saved = args.size();
- int argc=argc_saved;
- char** argv = new char*[argc + 1];
- for (int i = 0; i != argc; ++i)
- argv[i] = xbt_strdup(args[i].c_str());
- argv[argc] = nullptr;
- char* name = argv[0];
- char* instance = argv[1];
+ // copy C strings, we need them writable
+ std::vector<char*>* args4argv = new std::vector<char*>(args.size());
+ std::transform(begin(args), end(args), begin(*args4argv), [](const std::string& s) { return xbt_strdup(s.c_str()); });
+
+ // take a copy of args4argv to keep reference of the allocated strings
+ const std::vector<char*> args2str(*args4argv);
+ int argc = args4argv->size();
+ args4argv->push_back(nullptr);
+ char** argv = args4argv->data();
+