diff --git a/mex/sources/bytecode/SparseMatrix.cc b/mex/sources/bytecode/SparseMatrix.cc index b2bc13e28fdc89e1982482251ab0cb9cfe7dd20e..bb4bd780518a4b8e88ddc4e15e12e34a762aefe7 100644 --- a/mex/sources/bytecode/SparseMatrix.cc +++ b/mex/sources/bytecode/SparseMatrix.cc @@ -2313,9 +2313,15 @@ void dynSparseMatrix::End_Matlab_LU_UMFPack() { if (Symbolic) - umfpack_dl_free_symbolic(&Symbolic); + { + umfpack_dl_free_symbolic(&Symbolic); + Symbolic = nullptr; + } if (Numeric) - umfpack_dl_free_numeric(&Numeric); + { + umfpack_dl_free_numeric(&Numeric); + Numeric = nullptr; + } } void @@ -2364,6 +2370,8 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do SuiteSparse_long status = 0; if (iter == 0) { + if (Symbolic) + umfpack_dl_free_symbolic(&Symbolic); status = umfpack_dl_symbolic(n, n, Ap, Ai, Ax, &Symbolic, Control, Info); if (status < 0) { @@ -2372,7 +2380,7 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do throw FatalException{"umfpack_dl_symbolic failed"}; } } - if (iter > 0) + if (Numeric) umfpack_dl_free_numeric(&Numeric); status = umfpack_dl_numeric(Ap, Ai, Ax, Symbolic, &Numeric, Control, Info); if (status < 0) @@ -2471,6 +2479,8 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do SuiteSparse_long status = 0; if (iter == 0) { + if (Symbolic) + umfpack_dl_free_symbolic(&Symbolic); status = umfpack_dl_symbolic(n, n, Ap, Ai, Ax, &Symbolic, Control, Info); if (status < 0) { @@ -2479,7 +2489,7 @@ dynSparseMatrix::Solve_LU_UMFPack(SuiteSparse_long *Ap, SuiteSparse_long *Ai, do throw FatalException{"umfpack_dl_symbolic failed"}; } } - if (iter > 0) + if (Numeric) umfpack_dl_free_numeric(&Numeric); status = umfpack_dl_numeric(Ap, Ai, Ax, Symbolic, &Numeric, Control, Info); if (status < 0) diff --git a/mex/sources/bytecode/SparseMatrix.hh b/mex/sources/bytecode/SparseMatrix.hh index 9ecc48f00f8d3df7c4e7afd265119421564d5b99..12c5c76d141f33768808dcb5aac112eef3c19108 100644 --- a/mex/sources/bytecode/SparseMatrix.hh +++ b/mex/sources/bytecode/SparseMatrix.hh @@ -123,7 +123,7 @@ private: void Delete_u(int pos); void Clear_u(); void Print_u() const; - void *Symbolic, *Numeric; + void *Symbolic {nullptr}, *Numeric {nullptr}; void Check_the_Solution(int periods, int y_kmin, int y_kmax, int Size, double *u, int *pivot, int *b); int complete(int beg_t, int Size, int periods, int *b); void bksub(int tbreak, int last_period, int Size, double slowc_l);