From a893ad180353823f3e123cd268d98026e5a31ed7 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Wed, 10 May 2017 16:43:39 +0200 Subject: [PATCH] Fix memory leaks in FACTOR/MATRIX --- src/language/data-io/matrix-reader.c | 5 ----- src/language/stats/factor.c | 9 +++++---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/language/data-io/matrix-reader.c b/src/language/data-io/matrix-reader.c index 2c0aee2fec..65e3cf4d08 100644 --- a/src/language/data-io/matrix-reader.c +++ b/src/language/data-io/matrix-reader.c @@ -186,8 +186,6 @@ next_matrix_from_reader (struct matrix_material *mm, gsl_matrix_free (mr->n_vectors); gsl_matrix_free (mr->mean_vectors); gsl_matrix_free (mr->var_vectors); - gsl_matrix_free (mr->correlation); - gsl_matrix_free (mr->covariance); if (!casegrouper_get_next_group (mr->grouper, &group)) return false; @@ -200,9 +198,6 @@ next_matrix_from_reader (struct matrix_material *mm, mm->mean_matrix = mr->mean_vectors; mm->var_matrix = mr->var_vectors; - mr->correlation = NULL; - mr->covariance = NULL; - // FIXME: Make this into a hash table. unsigned long *table = xmalloc (sizeof (*table) * n_vars); int i; diff --git a/src/language/stats/factor.c b/src/language/stats/factor.c index 9480b3a17a..ae42d406a6 100644 --- a/src/language/stats/factor.c +++ b/src/language/stats/factor.c @@ -266,10 +266,6 @@ idata_free (struct idata *id) gsl_vector_free (id->msr); gsl_vector_free (id->eval); gsl_matrix_free (id->evec); - if (id->mm.cov != NULL) - gsl_matrix_free (id->mm.cov); - if (id->mm.corr != NULL) - gsl_matrix_free (CONST_CAST (gsl_matrix *, id->mm.corr)); free (id); } @@ -1480,7 +1476,9 @@ cmd_factor (struct lexer *lexer, struct dataset *ds) { do_factor_by_matrix (&factor, id); + gsl_matrix_free (id->mm.corr); id->mm.corr = NULL; + gsl_matrix_free (id->mm.cov); id->mm.cov = NULL; } @@ -2215,6 +2213,9 @@ do_factor (const struct cmd_factor *factor, struct casereader *r) do_factor_by_matrix (factor, idata); finish: + gsl_matrix_free (idata->mm.corr); + gsl_matrix_free (idata->mm.cov); + idata_free (idata); casereader_destroy (r); } -- 2.30.2