diff --git a/mex/sources/k_order_perturbation/dynamic_abstract_class.cc b/mex/sources/k_order_perturbation/dynamic_abstract_class.cc index e0da81e886f952bc92b89ac1e985d0b2d7c3a452..dae58d34e9545ffab39833b246b0d58991b638c5 100644 --- a/mex/sources/k_order_perturbation/dynamic_abstract_class.cc +++ b/mex/sources/k_order_perturbation/dynamic_abstract_class.cc @@ -21,6 +21,10 @@ #include "dynamic_abstract_class.hh" +DynamicModelAC::~DynamicModelAC() +{ +} + void DynamicModelAC::copyDoubleIntoTwoDMatData(double *dm, TwoDMatrix *tdm, int rows, int cols) { diff --git a/mex/sources/k_order_perturbation/dynamic_abstract_class.hh b/mex/sources/k_order_perturbation/dynamic_abstract_class.hh index 8c84dbe01377d73fb14bbba4afda04723925e4c7..5449589252386a25abbd5b4ae56f5272f5569f00 100644 --- a/mex/sources/k_order_perturbation/dynamic_abstract_class.hh +++ b/mex/sources/k_order_perturbation/dynamic_abstract_class.hh @@ -25,6 +25,7 @@ class DynamicModelAC { public: + virtual ~DynamicModelAC(); static double *unpackSparseMatrix(mxArray *sparseMatrix); static void copyDoubleIntoTwoDMatData(double *dm, TwoDMatrix *tdm, int rows, int cols); virtual void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady, diff --git a/mex/sources/k_order_perturbation/k_order_perturbation.cc b/mex/sources/k_order_perturbation/k_order_perturbation.cc index 1e6a88cc0da566aa02235066c7ccda0e40ebe14a..a0704b2291fc0a241aa3256dfc0eb51d5eb70c81 100644 --- a/mex/sources/k_order_perturbation/k_order_perturbation.cc +++ b/mex/sources/k_order_perturbation/k_order_perturbation.cc @@ -229,6 +229,7 @@ extern "C" { THREAD_GROUP::max_parallel_threads = 2; //params.num_threads; + DynamicModelAC *dynamicModelFile = NULL; try { // make journal name and journal @@ -236,7 +237,6 @@ extern "C" { jName += ".jnl"; Journal journal(jName.c_str()); - DynamicModelAC *dynamicModelFile; if (use_dll == 1) dynamicModelFile = new DynamicModelDLL(fName); else @@ -323,30 +323,41 @@ extern "C" { e.print(); ostringstream strstrm; strstrm << "dynare:k_order_perturbation: Caught Kord exception: " << e.get_message(); + if (dynamicModelFile) + delete dynamicModelFile; DYN_MEX_FUNC_ERR_MSG_TXT(strstrm.str().c_str()); } catch (const TLException &e) { e.print(); + if (dynamicModelFile) + delete dynamicModelFile; DYN_MEX_FUNC_ERR_MSG_TXT("dynare:k_order_perturbation: Caught TL exception"); } catch (SylvException &e) { e.printMessage(); + if (dynamicModelFile) + delete dynamicModelFile; DYN_MEX_FUNC_ERR_MSG_TXT("dynare:k_order_perturbation: Caught Sylv exception"); } catch (const DynareException &e) { ostringstream strstrm; strstrm << "dynare:k_order_perturbation: Caught KordDynare exception: " << e.message(); + if (dynamicModelFile) + delete dynamicModelFile; DYN_MEX_FUNC_ERR_MSG_TXT(strstrm.str().c_str()); } catch (const ogu::Exception &e) { ostringstream strstrm; strstrm << "dynare:k_order_perturbation: Caught general exception: " << e.message(); + if (dynamicModelFile) + delete dynamicModelFile; DYN_MEX_FUNC_ERR_MSG_TXT(strstrm.str().c_str()); } + delete dynamicModelFile; plhs[0] = mxCreateDoubleScalar(0); } // end of mexFunction() } // end of extern C