From d6c8a062cd430ae7a50d326d5bfa58d5e57afd58 Mon Sep 17 00:00:00 2001 From: "andrew.kraevskii" Date: Wed, 4 Mar 2026 01:46:16 +0300 Subject: [PATCH] Fix memory leaks found by DebugAllocator. --- src/main.zig | 1 + src/random_document.zig | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/main.zig b/src/main.zig index f641daa..9a5da46 100644 --- a/src/main.zig +++ b/src/main.zig @@ -8,6 +8,7 @@ pub fn main() !void { // std.heap.GeneralPurposeAllocator was renamed to DebugAllocator recently. var gpa: std.heap.DebugAllocator(.{}) = .init; defer _ = gpa.deinit(); + const allocator = gpa.allocator(); var backend = try SDLBackend.initWindow(.{ diff --git a/src/random_document.zig b/src/random_document.zig index 96c37d6..27db6db 100644 --- a/src/random_document.zig +++ b/src/random_document.zig @@ -85,6 +85,7 @@ fn randomizeObjectProperties(allocator: std.mem.Allocator, doc_size: *const Size y += randFloat(rng, -30, 60); } const slice = try allocator.dupe(Point2_f, list.items); + errdefer allocator.free(slice); try obj.setProperty(allocator, .{ .data = .{ .points = slice } }); }, } @@ -99,6 +100,7 @@ pub fn addRandomShapes(doc: *Document, allocator: std.mem.Allocator, rng: std.Ra for (0..n_root) |_| { if (total_count >= max_total) break; var obj = try shape.createObject(allocator, randomShapeKind(rng)); + defer obj.deinit(allocator); try randomizeObjectProperties(allocator, &doc.size, &obj, rng); try doc.addObject(allocator, obj); total_count += 1; @@ -116,6 +118,7 @@ pub fn addRandomShapes(doc: *Document, allocator: std.mem.Allocator, rng: std.Ra for (0..n_children) |_| { if (total_count >= max_total) break; var child = try shape.createObject(allocator, randomShapeKind(rng)); + defer child.deinit(allocator); try randomizeObjectProperties(allocator, &doc.size, &child, rng); try obj.addChild(allocator, child, &doc.next_object_id); total_count += 1;