From 5959265cbead8cb3e245c0ebdc09f6f6a02b6cae Mon Sep 17 00:00:00 2001 From: Geoff Hutchison Date: Fri, 10 Jan 2025 23:03:39 -0500 Subject: [PATCH] Added more defensive programming in the forcefield code Signed-off-by: Geoff Hutchison --- avogadro/qtplugins/forcefield/forcefield.cpp | 8 +++----- avogadro/qtplugins/forcefield/obenergy.cpp | 4 ++-- avogadro/qtplugins/forcefield/obmmenergy.cpp | 3 ++- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/avogadro/qtplugins/forcefield/forcefield.cpp b/avogadro/qtplugins/forcefield/forcefield.cpp index 85a0b426b5..d7fe113b7e 100644 --- a/avogadro/qtplugins/forcefield/forcefield.cpp +++ b/avogadro/qtplugins/forcefield/forcefield.cpp @@ -230,13 +230,11 @@ void Forcefield::setupMethod() m_methodName = recommendedForceField(); } - if (m_method == nullptr) { - // we have to create the calculator - m_method = Calc::EnergyManager::instance().model(m_methodName); - } else if (m_method->identifier() != m_methodName) { + if (m_method != nullptr) { delete m_method; // delete the previous one - m_method = Calc::EnergyManager::instance().model(m_methodName); } + m_method = Calc::EnergyManager::instance().model(m_methodName); + if (m_method != nullptr) m_method->setMolecule(m_molecule); } diff --git a/avogadro/qtplugins/forcefield/obenergy.cpp b/avogadro/qtplugins/forcefield/obenergy.cpp index 9ca9f7cec6..332698b9d0 100644 --- a/avogadro/qtplugins/forcefield/obenergy.cpp +++ b/avogadro/qtplugins/forcefield/obenergy.cpp @@ -35,8 +35,8 @@ class OBEnergy::Private ~Private() { - delete m_obmol; - delete m_forceField; + if (m_obmol != nullptr) + delete m_obmol; } }; diff --git a/avogadro/qtplugins/forcefield/obmmenergy.cpp b/avogadro/qtplugins/forcefield/obmmenergy.cpp index 49c67194be..8a7e9a3c0b 100644 --- a/avogadro/qtplugins/forcefield/obmmenergy.cpp +++ b/avogadro/qtplugins/forcefield/obmmenergy.cpp @@ -70,7 +70,8 @@ OBMMEnergy::OBMMEnergy(const std::string& method) OBMMEnergy::~OBMMEnergy() { delete m_inputFormat; - delete m_process; + if (m_process != nullptr) + delete m_process; } bool OBMMEnergy::acceptsRadicals() const