Приведенная ниже функция get выглядит так, как будто она возвращает срез, относящийся к данным в массиве, который выйдет за пределы области действия после возврата функции и, следовательно, содержит ошибку. Предполагая, что это правда, есть ли способ обнаружить это во время компиляции или даже во время выполнения в режиме отладки?
Я не смог найти никаких флагов компилятора, которые обнаруживали бы эту ошибку во время компиляции или во время выполнения, и задавался вопросом, пропустил ли я что-нибудь, что могло бы помочь, или это просто не то, что zig может обнаружить в это время, и это нормально, я просто надо быть осторожнее :)
Это урезанный пример реальной проблемы, которая у меня была, для диагностики которой потребовалось некоторое время, чтобы продемонстрировать проблему.
const std = @import("std");
fn get() []u8 {
var data : [100]u8 = undefined;
return data[0..99];
}
pub fn main() !void {
const data = get();
std.debug.print("Name: [{}]\n", .{data});
}