From aa16453072477ed1f90def01bdd55bebac696f61 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 28 Mar 2026 23:05:23 +0200 Subject: fix: Squash memory leaks --- graphics.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/graphics.c b/graphics.c index d42e104..d7e5ebd 100644 --- a/graphics.c +++ b/graphics.c @@ -6,6 +6,7 @@ #include "AnimationRender/F_Draw.h" #include "AnimationRender/F_FrameRange.h" #include "AnimationRender/F_Interpolate.h" +#include "AnimationRender/FrameCallback.h" #include "FrameRender/FrameRender.h" #include "FrameRender/P_Checker.h" #include "FrameRender/P_Circle.h" @@ -24,7 +25,9 @@ main() { u32 width = 512; u32 height = 512; - RGBImage bclc = ppm_read(fopen("bclc.ppm", "rb")); + FILE* fbclc = fopen("bclc.ppm", "rb"); + RGBImage bclc = ppm_read(fbclc); + fclose(fbclc); PixelCallback* callbacks[] = { Checker_setup((Checker){ @@ -68,7 +71,7 @@ main() { Circle c1 = { .radius = 50, .color = 0x00FFFFFF, }, c2 = { .radius = 50, .color = 0xFFFFFFFF, }; - const FrameCallback* frameCallbacks[] = { + FrameCallback* frameCallbacks[] = { Interpolate_setup((Interpolate){ .startValue = &c1, .endValue = &c2, .value = callbacks[8]->callback_self, @@ -98,7 +101,7 @@ main() { }; u32 sizeFrameCallbacks = sizeof(frameCallbacks) / sizeof(*frameCallbacks); - RenderAnimation(width, height, 150, frameCallbacks, sizeFrameCallbacks); + RenderAnimation(width, height, 150, (const FrameCallback**)frameCallbacks, sizeFrameCallbacks); RGBImage_delete(&bclc); for (u32 i = 0; i < sizeCallbacks; ++i) { @@ -106,6 +109,11 @@ main() { free(callbacks[i]->callback_self); free(callbacks[i]); } + for (u32 i = 0; i < sizeFrameCallbacks; ++i) { + if (frameCallbacks[i] == NULL) continue; + free(frameCallbacks[i]->callback_self); + free(frameCallbacks[i]); + } return 0; } -- cgit v1.2.3