From d40a355d8bd4cc54a08e7eecef2eff177cf6190b Mon Sep 17 00:00:00 2001 From: Al Date: Sun, 12 Mar 2017 20:20:51 -0400 Subject: [PATCH] [fix] heap issues when cleaning up CRF --- src/crf_trainer_averaged_perceptron.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/crf_trainer_averaged_perceptron.c b/src/crf_trainer_averaged_perceptron.c index d7fc2b60..e98b5329 100644 --- a/src/crf_trainer_averaged_perceptron.c +++ b/src/crf_trainer_averaged_perceptron.c @@ -671,9 +671,11 @@ bool crf_averaged_perceptron_trainer_train_example(crf_averaged_perceptron_train return false; } - uint32_array_resize_fixed(self->viterbi, num_tokens); + if (!uint32_array_resize_fixed(self->viterbi, num_tokens)) { + log_error("Error resizing Viterbi, num_tokens=%zu\n", num_tokens); + return false; + } - uint32_t *viterbi = self->viterbi->a; double viterbi_score = crf_context_viterbi(crf_context, viterbi); if (self->viterbi->n != num_tokens || self->label_ids->n != num_tokens) { @@ -683,6 +685,8 @@ bool crf_averaged_perceptron_trainer_train_example(crf_averaged_perceptron_train uint32_t *true_labels = self->label_ids->a; + uint32_t *viterbi = self->viterbi->a; + for (uint32_t i = 0; i < num_tokens; i++) { uint32_t truth = true_labels[i]; @@ -932,11 +936,9 @@ crf_t *crf_averaged_perceptron_trainer_finalize(crf_averaged_perceptron_trainer_ crf->state_trans_features = state_trans_features; - crf->viterbi = self->viterbi; - self->viterbi = NULL; + crf->viterbi = uint32_array_new(); - crf->context = self->base_trainer->context; - self->base_trainer->context = NULL; + crf->context = crf_context_new(CRF_CONTEXT_VITERBI | CRF_CONTEXT_MARGINALS, num_classes, CRF_CONTEXT_DEFAULT_NUM_ITEMS); crf_averaged_perceptron_trainer_destroy(self);