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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:33:15