← 中文资源

简体中文版本

Rust 报 E0432:生命周期可能不够长

通过关联输入与输出的生命周期,或改为返回拥有所有权的数据,修复生命周期错误。

阅读英文原文

症状

编译器报生命周期错误,例如 lifetime may not live long enough。它意味着某引用的有效期需要长于其所指数据,或返回的引用未与输入生命周期关联,编译器无法证明它不会悬垂。存储引用却未声明生命周期参数的结构体会产生相关错误。

诊断

读取编译器给出的生命周期约束;用显式生命周期关联输入与输出;或改为返回拥有所有权的数据。

cargo build 2>&1 | head -40

根因

某引用需要比其借用来源存活更久,或返回的引用未与输入生命周期关联,导致借用可能悬垂而被编译器拒绝。

修复

用显式参数关联输入输出生命周期;简单情形交给生命周期省略;引用会超出其来源时改为返回拥有所有权的值;字段为引用的结构体加上生命周期参数。

验证

重新构建确认生命周期错误消失,再跑在调用后使用借用结果的测试确认其仍有效。成功使用该引用才是它不悬垂的真正证明。

常见陷阱

用 ’static 强行标注会掩盖短生命周期,通常误用;应表达真实的关系。