From 0eded6d7feab3322a1734444599475a24707367b Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 13 Jul 2018 19:07:29 +0200 Subject: [PATCH 1/1] Fix memory leak of variable job on throw (cppcheck). --- .../replay_multiple_manual.cpp | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp b/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp index 9aeb8690ae..c218cbe565 100644 --- a/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp +++ b/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.cpp @@ -187,43 +187,42 @@ static std::vector all_jobs(const std::string& workload_file) std::istringstream is(line); if (is >> app_name >> filename_unprefixed >> app_size >> starting_time >> alloc) { try { - - Job* job = new Job; - job->smpi_app_name = app_name; - job->filename = dir + "/" + filename_unprefixed; - job->app_size = app_size; - job->starting_time = starting_time; + Job job; + job.smpi_app_name = app_name; + job.filename = dir + "/" + filename_unprefixed; + job.app_size = app_size; + job.starting_time = starting_time; std::vector subparts; boost::split(subparts, alloc, boost::is_any_of(","), boost::token_compress_on); - if ((int)subparts.size() != job->app_size) + if ((int)subparts.size() != job.app_size) throw std::invalid_argument("size/alloc inconsistency"); - job->allocation.resize(subparts.size()); + job.allocation.resize(subparts.size()); for (unsigned int i = 0; i < subparts.size(); ++i) - job->allocation[i] = stoi(subparts[i]); + job.allocation[i] = stoi(subparts[i]); // Let's read the filename - std::ifstream traces_file(job->filename); + std::ifstream traces_file(job.filename); if (!traces_file.is_open()) - throw std::invalid_argument("Cannot open file " + job->filename); + throw std::invalid_argument("Cannot open file " + job.filename); std::string traces_line; while (std::getline(traces_file, traces_line)) { boost::trim_right(traces_line); - job->traces_filenames.push_back(dir + "/" + traces_line); + job.traces_filenames.push_back(dir + "/" + traces_line); } - if (static_cast(job->traces_filenames.size()) < job->app_size) + if (static_cast(job.traces_filenames.size()) < job.app_size) throw std::invalid_argument("size/tracefiles inconsistency"); - job->traces_filenames.resize(job->app_size); + job.traces_filenames.resize(job.app_size); XBT_INFO("Job read: app='%s', file='%s', size=%d, start=%d, " "alloc='%s'", - job->smpi_app_name.c_str(), filename_unprefixed.c_str(), job->app_size, job->starting_time, + job.smpi_app_name.c_str(), filename_unprefixed.c_str(), job.app_size, job.starting_time, alloc.c_str()); - jobs.push_back(job); + jobs.push_back(new Job(std::move(job))); } catch (const std::invalid_argument& e) { xbt_die("Bad line '%s' of file '%s': %s.\n", line.c_str(), workload_file.c_str(), e.what()); } -- 2.20.1