Skip to content
Snippets Groups Projects
Commit f98226f8 authored by johannes.heinecke's avatar johannes.heinecke
Browse files

correction unfreed memory/invalid acces: valgrind does not report any error anymore

parent 71b263d5
No related branches found
No related tags found
2 merge requests!4Johannes,!3correction unfreed memory/invalid acces: valgrind does not report any error anymore
......@@ -18,6 +18,9 @@ dico_vec *dico_vec_new(void)
void dico_vec_free(dico_vec *dv)
{
if(dv){
if (dv->ht)
hash_free(dv->ht);
if(dv->t)
free(dv->t);
free(dv);
......@@ -98,5 +101,6 @@ dico_vec *dico_vec_read(char *filename, float ratio)
while(!feof(f)){
dico_vec_add(dv, dico_read_fh(f, ratio));
}
fclose(f);
return dv;
}
......@@ -39,6 +39,7 @@ void hash_free(hash *h)
int i;
for(i=0; i < h->size; i++)
cell_free(h->array[i]);
free(h->array);
free(h);
}
......
......@@ -156,8 +156,15 @@ void context_set_linguistic_resources_filenames(context *ctx)
if(ctx->maca_data_path)
strcat(absolute_path, ctx->maca_data_path);
else
strcat(absolute_path, getenv("MACAON_DIR"));
else {
char *e = getenv("MACAON_DIR");
if (e != NULL) {
strcat(absolute_path, e);
} else {
fprintf(stderr, "ATTENTION: the environment variable MACAON_DIR is not defined\n");
}
}
strcat(absolute_path, "/");
strcat(absolute_path, ctx->language);
......
......@@ -22,6 +22,13 @@ void context_free(context *ctx)
if(ctx->maca_data_path) free(ctx->maca_data_path);
if(ctx->language) free(ctx->language);
if(ctx->root_label) free(ctx->root_label);
if(ctx->vocabs_filename) free(ctx->vocabs_filename);
if (ctx->mcd_struct)
mcd_free(ctx->mcd_struct);
if (ctx->vocabs)
dico_vec_free(ctx->vocabs);
if(ctx->d_perceptron_features)
dico_free(ctx->d_perceptron_features);
......@@ -251,12 +258,14 @@ context *context_read_options(int argc, char *argv[])
ctx->vocabs_filename = strdup(optarg);
break;
case 'L':
if (ctx->language) free(ctx->language); // libérer le default (strdup("fr") )
ctx->language = strdup(optarg);
break;
case 'D':
ctx->maca_data_path = strdup(optarg);
break;
case 'R':
if (ctx->root_label) free(ctx->root_label); // libérer le default (strdup("root") )
ctx->root_label = strdup(optarg);
break;
case 'P':
......
......@@ -6,18 +6,15 @@
void simple_feat_desc_free(simple_feat_desc *sfd)
{
/* if(sfd->name)
if(sfd->name)
free(sfd->name);
free(sfd);*/
free(sfd);
}
void feat_desc_free(feat_desc *fd)
{
int i;
for(i=0; i < fd->nbelem; i++)
simple_feat_desc_free(fd->array[i]);
free(fd->array);
/* free(fd); */
free(fd);
}
simple_feat_desc *simple_feat_desc_new(char *name, int type, feat_fct fct)
......
......@@ -23,6 +23,7 @@ feat_desc *feat_desc_new(void);
void feat_desc_free(feat_desc *fd);
feat_desc *feat_desc_add(feat_desc *fd, simple_feat_desc *sfd);
simple_feat_desc *simple_feat_desc_new(char *name, int type, feat_fct fct);
void simple_feat_desc_free(simple_feat_desc *sfd);
#endif
......
......@@ -7,6 +7,7 @@ void feat_lib_add(feat_lib *fl, int feature_type, char *feature_name, feat_fct f
int feature_nb = dico_add(fl->d_features, feature_name);
fl->array = (simple_feat_desc **)realloc(fl->array, (feature_nb + 1) * sizeof(simple_feat_desc *));
fl->array[feature_nb] = simple_feat_desc_new(feature_name, feature_type, feature_fct);
fl->nbelem = feature_nb+1;
}
simple_feat_desc *feat_lib_get_simple_feat_desc(feat_lib *fl, char *feat_name)
......@@ -28,6 +29,16 @@ feat_lib *feat_lib_new(void)
return fl;
}
void feat_lib_free(feat_lib *fl) {
for(int i=0; i < fl->nbelem; ++i) {
simple_feat_desc_free(fl->array[i]);
}
dico_free(fl->d_features);
free(fl->array);
free(fl); // ne devrait pas etre en commentaire
}
feat_lib *feat_lib_build(void)
{
......
......@@ -16,5 +16,5 @@ feat_lib *feat_lib_new(void);
void feat_lib_add(feat_lib *fl, int feature_type, char *feature_name, feat_fct feature_fct);
simple_feat_desc *feat_lib_get_simple_feat_desc(feat_lib *fl, char *feat_name);
feat_lib *feat_lib_build(void);
void feat_lib_free(feat_lib *fl);
#endif
......@@ -44,7 +44,9 @@ void feat_model_free(feat_model *fm)
int i;
for(i=0; i < fm->nbelem; i++)
feat_desc_free(fm->array[i]);
free(fm->array);
free(fm->name);
feat_lib_free(fm->fl);
free(fm);
}
......@@ -55,7 +57,8 @@ feat_model *feat_model_read(char *filename, int verbose)
int feature_number = 0;
char buffer[1000]; /* ugly */
char *feat_name;
feat_lib *fl = feat_lib_build();
//feat_lib *fl
fm->fl = feat_lib_build(); // must be preserved in feature_model to delete correctly features at the end
simple_feat_desc *sfd;
feat_desc *fd;
......@@ -67,7 +70,7 @@ feat_model *feat_model_read(char *filename, int verbose)
feat_name = strtok(buffer, " \n");
do{
if(verbose) fprintf(stderr, "\t%s", feat_name);
sfd = feat_lib_get_simple_feat_desc(fl, feat_name);
sfd = feat_lib_get_simple_feat_desc(fm->fl, feat_name);
if(sfd)
feat_desc_add(fd, sfd);
}while((feat_name = strtok(NULL, " \n")));
......
......@@ -2,6 +2,7 @@
#define __FEAT_MODEL__
#include "feat_desc.h"
#include "feat_lib.h"
typedef struct {
char string[2048];
......@@ -9,6 +10,7 @@ typedef struct {
int nbelem;
feat_desc **array;
int dim;
feat_lib *fl; // stores all simple features
} feat_model;
#include "config.h"
......
......@@ -41,7 +41,7 @@ int main(int argc, char *argv[])
char *mcf_filename = NULL;
FILE *mcf_file = NULL;
int verbose = 0;
word_buffer *wb = NULL;
//word_buffer *wb = NULL;
config *c = NULL;
int mode = MODE_PARSER;
......
......@@ -12,6 +12,9 @@ int i;
void mvt_stack_free(mvt_stack *s)
{
for(int i=0; i < s->size; ++i) {
mvt_free(s->array[i]);
}
free(s->array);
free(s);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment