[英]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.