diff options
| author | Jesper Jensen <jesper@jnsn.dev> | 2026-02-11 20:02:04 +0100 |
|---|---|---|
| committer | Jesper Jensen <jesper@jnsn.dev> | 2026-02-11 20:02:04 +0100 |
| commit | 679907d1b2023396b5f353b3390ca0879fc15e50 (patch) | |
| tree | 2688a6f42bcf2688c80a96a9bd2128982befcd64 /src | |
| parent | 254e05a47ad4e22fa20885dec62acc59ecc561d0 (diff) | |
Free some memory before it leaks
Diffstat (limited to 'src')
| -rw-r--r-- | src/construction.c | 12 | ||||
| -rw-r--r-- | src/main.c | 7 | ||||
| -rw-r--r-- | src/solve.c | 10 | ||||
| -rw-r--r-- | src/topology.c | 7 |
4 files changed, 35 insertions, 1 deletions
diff --git a/src/construction.c b/src/construction.c index 090a36f..dc80359 100644 --- a/src/construction.c +++ b/src/construction.c @@ -197,4 +197,16 @@ void place_points(struct drawing *drawing, double inputs[]) { } } +void free_drawing(struct drawing *drawing) { + struct command *c = drawing->root; + while (c) { + struct command *next = c->next; + free(c); + c = next; + } + drawing->root = NULL; + drawing->tail = NULL; + drawing->error = NULL; +} + @@ -143,6 +143,8 @@ void draw_from_constraints(struct constraints *c, struct topology *t, struct can draw_topology(cv, t); draw_constraints(cv, c); end_drawing(cv); + + free_drawing(&drawing); } int main(int argc, char *argv[]) { @@ -268,6 +270,9 @@ int main(int argc, char *argv[]) { .state = CANVAS_INIT, .f = stdout, }; - + draw_from_constraints(&constraints, &topo, &canvas); + + free_constraints(&constraints); + free_topology(&topo); } diff --git a/src/solve.c b/src/solve.c index 3f8e081..630a0a6 100644 --- a/src/solve.c +++ b/src/solve.c @@ -40,6 +40,14 @@ void add_constraint(struct constraints *c, struct constraint *new) { c->length += new_num; } +void free_constraints(struct constraints *c) { + free(c->elements); + c->elements = NULL; + c->length = 0; + c->capacity = 0; + c->aliases_num = 0; +} + // @COMPL: We should do something better than this. I don't really know what. struct frontier { @@ -177,6 +185,7 @@ static bool find_angle(struct constraint *constraints, size_t constraints_num, s if(frame < frames + SEARCH_DEPTH-1) { path[frame - frames + 1].i = -1; } + free(checked); return true; } @@ -187,6 +196,7 @@ static bool find_angle(struct constraint *constraints, size_t constraints_num, s frame->head = other; } + free(checked); return false; } diff --git a/src/topology.c b/src/topology.c index e12057d..3422efb 100644 --- a/src/topology.c +++ b/src/topology.c @@ -38,3 +38,10 @@ void add_fragment(struct topology *topo, struct topology_elem *new) { memcpy(topo->elements + topo->length, new, new_num * sizeof(struct topology_elem)); topo->length += new_num; } + +void free_topology(struct topology *topo) { + free(topo->elements); + topo->elements = NULL; + topo->length = 0; + topo->capacity = 0; +} |
