From 0dfec40ad0e228992ff3095af88609068979496e Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 10 Aug 2018 23:14:33 +0200 Subject: [PATCH] Forgot that ifort needs argv to stay alive. --- src/smpi/internals/smpi_global.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index 0fa426029b..84c818a1e2 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -428,14 +428,14 @@ typedef void (*smpi_fortran_entry_point_type)(); static int smpi_run_entry_point(smpi_entry_point_type entry_point, std::vector args) { // copy C strings, we need them writable - std::vector args4argv(args.size()); - std::transform(begin(args), end(args), begin(args4argv), [](const std::string& s) { return xbt_strdup(s.c_str()); }); + std::vector* args4argv = new std::vector(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 args2str(args4argv); - int argc = args4argv.size(); - args4argv.push_back(nullptr); - char** argv = args4argv.data(); + const std::vector args2str(*args4argv); + int argc = args4argv->size(); + args4argv->push_back(nullptr); + char** argv = args4argv->data(); simgrid::smpi::ActorExt::init(&argc, &argv); #if SMPI_IFORT @@ -450,9 +450,11 @@ static int smpi_run_entry_point(smpi_entry_point_type entry_point, std::vector