簡體   English   中英

切片引用 zig 語言中的范圍外數據

[英]Slice referring to out of scope data in zig language

下面的 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 和 Ownership部分的理解,我相信編譯器目前不反對這種行為(撰寫本文時為 0.6.0):

Zig 程序員有責任確保在指向的內存不再可用時不訪問指針。 請注意,切片是一種指針形式,因為它引用其他內存。

雖然它可以通過描述類似行為的這個問題來解決: https : //github.com/ziglang/zig/issues/5725

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM