I’m trying to allocate some number of bytes to an uninitialized var of type u8
in a different scope, the array can not be const. The compiler keeps complaining about unmatching type:
error: expected type '*const[0:0]u8', found '[]u8'
What am I doing wrong, how can we do this?
-
Create an empty array, here one of type
u8
(a string)var my_array = ""
-
In another scope, allocate it to match some parameter
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); const allocator = arena.allocator(); if (true) { my_array = try allocator.alloc(u8, 4); defer allocator.free(my_array); std.mem.copyForwards(u8, my_array, "okok") }
-
When building you get a type error:
error: expected type '*const[0:0]u8', found '[]u8'
However, it works when calling the allocator.alloc
on a const array. But then I can not access it in the greater scope.
const my_array = try allocator.alloc(u8, 4);
0
The type of ""
is *const[0:0]u8
(which is just a pointer) but allocator.alloc(u8, 4)
returns []u8
(which consists of a pointer and a length), so you get a type mismatch.
To create a variable of type []u8
and leave it uninitialized, you can use
var my_array: []u8 = undefined;