gpt4 book ai didi

zig - 切片引用 zig 语言中的范围外数据

转载 作者:行者123 更新时间:2023-12-04 08:45:23 24 4
gpt4 key购买 nike

下面的 get 函数在我看来就像它返回一个切片,该切片引用数组中的数据,一旦函数返回,该切片将超出范围,因此出错。假设这是真的,有没有办法在编译时甚至在 Debug模式下运行时检测到这一点?
我找不到任何在编译时或运行时检测到此错误的编译器标志,并想知道我是否遗漏了任何可以提供帮助的东西,或者这不是 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)。部分文档:

It is the Zig programmer's responsibility to ensure that a pointer isnot accessed when the memory pointed to is no longer available. Notethat a slice is a form of pointer, in that it references other memory.


虽然它可以通过描述类似行为的这个问题来解决: https://github.com/ziglang/zig/issues/5725

关于zig - 切片引用 zig 语言中的范围外数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64353847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com