Fix memory leak by adding "owner" concept of node
This commit is contained in:
parent
bdfc36ea3f
commit
bb6c681780
3 changed files with 17 additions and 9 deletions
|
@ -7,6 +7,11 @@
|
|||
|
||||
void free_word_def_value(void *x) {
|
||||
struct hf__interpreter__word *word = x;
|
||||
|
||||
for (size_t i = 0; i < word->body_len; i++) {
|
||||
// TODO: free nodes
|
||||
}
|
||||
|
||||
free(word->body);
|
||||
free(word);
|
||||
}
|
||||
|
@ -54,17 +59,12 @@ struct hf__result words__word(struct hf__interpreter *const interpreter,
|
|||
hf__parser__node_array_push(
|
||||
&interpreter->call_stack, &interpreter->call_stack_len,
|
||||
&interpreter->call_stack_size, (*word)->body[i]);
|
||||
interpreter->call_stack[interpreter->call_stack_len - 1].is_owner = false;
|
||||
}
|
||||
|
||||
/* FIXME: Word name points to copy of pointer of original name,
|
||||
when cleared here all other references loose access to the pointer's value
|
||||
=> SIGSEV!
|
||||
|
||||
For now I am going to ignore the memory leak.
|
||||
Copying the word name may be a better option but is pretty memory
|
||||
inefficient.
|
||||
*/
|
||||
// free(node->value.word.value);
|
||||
if (node->is_owner) {
|
||||
free(node->value.word.value);
|
||||
}
|
||||
|
||||
return HF__OK;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue