Rust测试中println!触发栈溢出错误,求原因解析
Rust测试函数栈溢出错误原因解析
你的代码出现栈溢出的核心原因是测试模块内的set测试函数与外部的set函数同名,导致无限递归调用。
当你在测试函数set里执行set()时,Rust的名字解析规则会优先匹配当前作用域内的函数——也就是这个测试函数本身,而非外部定义的set函数。这就形成了无限递归:测试函数不断调用自己,每次调用都会在栈上分配新的栈帧,直到栈空间被耗尽,最终触发栈溢出错误。
修复方案
有两种简单的解决方式:
- 给测试函数重命名,避免与外部函数冲突:
fn set() -> String { String::from("Foo") } #[cfg(test)] mod tests { use super::*; #[test] fn test_set() { println!("{:?}", set()); assert!(true) } }
- 明确指定外部函数的路径,用
super::set()调用外部的set:
fn set() -> String { String::from("Foo") } #[cfg(test)] mod tests { use super::*; #[test] fn set() { println!("{:?}", super::set()); assert!(true) } }
内容的提问来源于stack exchange,提问作者wallgeek
相关产品推荐
相关产品推荐

