diff options
| author | Syndamia <kamen@syndamia.com> | 2026-03-28 23:05:23 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2026-03-28 23:05:38 +0200 |
| commit | aa16453072477ed1f90def01bdd55bebac696f61 (patch) | |
| tree | 3d36dec5886b4fd658dfa62698046ac7dbe27b10 | |
| parent | fec9d432c13f72af24d78841779d73df18e86a73 (diff) | |
| download | ppm_graphics-aa16453072477ed1f90def01bdd55bebac696f61.tar ppm_graphics-aa16453072477ed1f90def01bdd55bebac696f61.tar.gz ppm_graphics-aa16453072477ed1f90def01bdd55bebac696f61.zip | |
fix: Squash memory leaks
| -rw-r--r-- | graphics.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -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; } |
