Avoid leaking memory in error cases

This commit is contained in:
Richard Berger
2021-04-20 14:06:53 -04:00
parent 8826e962de
commit aba4dfc42e

View File

@ -35,6 +35,7 @@
#include <cstring>
#include <map>
#include <utility>
#include <vector>
using namespace LAMMPS_NS;
@ -380,7 +381,7 @@ void Group::assign(int narg, char **arg)
if (narg < 4) error->all(FLERR,"Illegal group command");
int length = narg-2;
int *list = new int[length];
std::vector<int> list(length);
int jgroup;
for (int iarg = 2; iarg < narg; iarg++) {
@ -409,8 +410,6 @@ void Group::assign(int narg, char **arg)
if (mask[i] & otherbit) mask[i] &= inverse;
}
delete [] list;
// style = union
} else if (strcmp(arg[1],"union") == 0) {
@ -418,7 +417,7 @@ void Group::assign(int narg, char **arg)
if (narg < 3) error->all(FLERR,"Illegal group command");
int length = narg-2;
int *list = new int[length];
std::vector<int> list(length);
int jgroup;
for (int iarg = 2; iarg < narg; iarg++) {
@ -439,8 +438,6 @@ void Group::assign(int narg, char **arg)
if (mask[i] & otherbit) mask[i] |= bit;
}
delete [] list;
// style = intersect
} else if (strcmp(arg[1],"intersect") == 0) {
@ -448,7 +445,7 @@ void Group::assign(int narg, char **arg)
if (narg < 4) error->all(FLERR,"Illegal group command");
int length = narg-2;
int *list = new int[length];
std::vector<int> list(length);
int jgroup;
for (int iarg = 2; iarg < narg; iarg++) {
@ -472,8 +469,6 @@ void Group::assign(int narg, char **arg)
if (ok) mask[i] |= bit;
}
delete [] list;
// style = dynamic
// create a new FixGroup to dynamically determine atoms in group
@ -539,13 +534,12 @@ void Group::assign(int narg, char **arg)
void Group::assign(const std::string &groupcmd)
{
auto args = utils::split_words(groupcmd);
char **newarg = new char*[args.size()];
std::vector<char*> newarg(args.size());
int i=0;
for (const auto &arg : args) {
newarg[i++] = (char *)arg.c_str();
}
assign(args.size(),newarg);
delete[] newarg;
assign(args.size(),newarg.data());
}
/* ----------------------------------------------------------------------