Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Ensure that MC session and checker are deleted.
[simgrid.git] / src / mc / explo / simgrid_mc.cpp
index 8da00022dae55bcfcfbc4a5d5edb9e73c91f811b..99dd4a3a98aeea430ae011590f8eed5cbdf900b5 100644 (file)
 
 using api = simgrid::mc::Api;
 
-static inline char** argvdup(int argc, char** argv)
-{
-  auto* argv_copy = new char*[argc + 1];
-  std::memcpy(argv_copy, argv, sizeof(char*) * argc);
-  argv_copy[argc] = nullptr;
-  return argv_copy;
-}
-
 int main(int argc, char** argv)
 {
   xbt_assert(argc >= 2, "Missing arguments");
@@ -36,7 +28,7 @@ int main(int argc, char** argv)
 
   // The initialization function can touch argv.
   // We make a copy of argv before modifying it in order to pass the original value to the model-checked application:
-  char** argv_copy = argvdup(argc, argv);
+  std::vector<char*> argv_copy{argv, argv + argc + 1};
 
   xbt_log_init(&argc, argv);
 #if HAVE_SMPI
@@ -55,7 +47,7 @@ int main(int argc, char** argv)
     algo = simgrid::mc::CheckerAlgorithm::Liveness;
 
   int res      = SIMGRID_MC_EXIT_SUCCESS;
-  auto checker = api::get().initialize(argv_copy, algo);
+  std::unique_ptr<simgrid::mc::Exploration> checker{api::get().initialize(argv_copy.data(), algo)};
   try {
     checker->run();
   } catch (const simgrid::mc::DeadlockError&) {
@@ -66,7 +58,6 @@ int main(int argc, char** argv)
     res = SIMGRID_MC_EXIT_LIVENESS;
   }
   api::get().s_close();
-  delete[] argv_copy;
-  // delete checker; SEGFAULT in liveness
+  checker.release(); // FIXME: this line should not exist, but it segfaults in liveness
   return res;
 }