summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2026-02-11 20:02:04 +0100
committerJesper Jensen <jesper@jnsn.dev>2026-02-11 20:02:04 +0100
commit679907d1b2023396b5f353b3390ca0879fc15e50 (patch)
tree2688a6f42bcf2688c80a96a9bd2128982befcd64 /src
parent254e05a47ad4e22fa20885dec62acc59ecc561d0 (diff)
Free some memory before it leaks
Diffstat (limited to 'src')
-rw-r--r--src/construction.c12
-rw-r--r--src/main.c7
-rw-r--r--src/solve.c10
-rw-r--r--src/topology.c7
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;
+}
+
diff --git a/src/main.c b/src/main.c
index 5bf91b1..3781dcd 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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;
+}