You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust代码出现cannot return value referencing temporary value错误原因排查

错误原因分析与解决方案

核心错误原因

你的函数签名声明返回Result<Option<&'static OsStr>, Box<dyn Error>>,问题出在:

  • env::current_exe()返回的PathBuf是函数内的临时值,函数执行结束后会被Rust所有权系统销毁。
  • file_name()方法返回的Option<&OsStr>是对这个临时PathBuf内部数据的引用,当临时PathBuf被销毁时,这个引用就成了悬空引用。Rust的借用检查器会直接阻止这种不安全行为,也就是你看到的E0515错误。

你尝试的代码为什么没用

你用to_owned()或clone()克隆了PathBuf,但克隆出来的依然是函数内的临时对象,file_name()返回的引用还是绑定到这个临时对象上。函数结束时临时对象依然会被销毁,引用还是无法安全返回。

正确的解决方式

既然不能返回临时对象的引用,那就返回拥有所有权的类型。把函数签名里的&'static OsStr换成OsString(OsStr的所有权版本),然后将file_name()的结果转换为拥有所有权的形式:

use std::env;
use std::error::Error;
use std::ffi::OsString;

fn exe_name() -> Result<Option<OsString>, Box<dyn Error>> {
    // 两种写法任选其一
    Ok(env::current_exe()?.file_name().map(|s| s.to_owned()))
    // Ok(env::current_exe()?.file_name().cloned())
}

修改后,OsString会获得文件名的所有权,能安全返回并在函数外部使用,完全符合Rust的所有权规则。

内容的提问来源于stack exchange,提问作者manungsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:12:07