切片以zig语言引用超出范围的数据

问题描述

下面的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});
}

解决方法

基于对文档Lifetime and Ownership部分的理解,我相信编译器目前尚无此行为(在撰写本文时为0.6.0):

确保指针是Zig程序员的责任 当指向的内存不再可用时,无法访问。注意 切片是指针的一种形式,因为它引用了其他内存。

尽管此问题可以解决,该问题描述了类似的行为:https://github.com/ziglang/zig/issues/5725

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...