gpt4 book ai didi

rust - 如何在 Rust 允许的函数内返回变量 "let"?

转载 作者:行者123 更新时间:2023-11-29 08:28:48 24 4
gpt4 key购买 nike

This example编译并返回“预期”输出。但这不是悬空指针场景吗?如果是这样,Rust 编译器怎么会允许这样做?

use serde_json::{Value, json};
use std::io::Result;

fn main(){
println!("{:#?}", test_json_lifetime());
}

fn test_json_lifetime() -> Result<(Value)> {
let j = json!({ "name" : "test" });
Ok(j)
}

最佳答案

听起来你在想 j分配在 test_json_lifetime() 的堆栈帧上(当堆栈展开时,内存在函数末尾被释放),我们返回对 j 的引用(这会导致悬空指针)。

在这种情况下,你是对的 j在堆栈上分配,但是当我们返回时 Ok(j)我们不返回对 j 的引用,而是我们复制 jResult<(Value)>的空间在 main() 上分配的函数调用前的堆栈帧 test_json_lifetime() .

关于rust - 如何在 Rust 允许的函数内返回变量 "let"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56690874/

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