Rust 为什么这个生锈的二叉树会在测试中溢出堆栈?

Rust 为什么这个生锈的二叉树会在测试中溢出堆栈?,rust,rust-cargo,Rust,Rust Cargo,我已经编写了一个类似二叉树的结构,但是我在一些压力测试中遇到了堆栈溢出错误。我已将导致错误的代码缩减为以下内容: 结构节点{ 索引:usize, 右:选项>, } 我不明白这段代码怎么会导致堆栈溢出,因为所有数据似乎都分配在堆上,并且没有递归 更奇怪的是,当我运行cargo-test时,此代码会导致溢出,但当我运行cargo-run时不会,即使mytest和main调用相同的代码 这里出了什么问题?我相信你的问题已经得到了和的回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题

我已经编写了一个类似二叉树的结构,但是我在一些压力测试中遇到了堆栈溢出错误。我已将导致错误的代码缩减为以下内容: 结构节点{ 索引:usize, 右:选项>, }

我不明白这段代码怎么会导致堆栈溢出,因为所有数据似乎都分配在堆上,并且没有递归

更奇怪的是,当我运行
cargo-test
时,此代码会导致溢出,但当我运行
cargo-run
时不会,即使
mytest
main
调用相同的代码


这里出了什么问题?

我相信你的问题已经得到了和的回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;DR:“并且没有递归”是一个谎言,测试的堆栈大小更小。啊,所以默认的析构函数是递归的;这很有道理,谢谢你。
struct BoxedTree {
    root: Option<Box<Node>>,
}

fn build_degenerate() {
    let mut t = BoxedTree {
        root: Some(Box::new(Node {
            index: 0,
            right: None,
        })),
    };
    let mut n = t.root.as_mut().unwrap();
    for i in 1..50000 {
        let cur = n;
        let p = &mut cur.right;
        *p = Some(Box::new(Node {
            index: i,
            right: None,
        }));
        n = p.as_mut().unwrap();
    }
    println!("{}", n.index);
}

fn main() {
    build_degenerate();
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn mytest() {
        build_degenerate();
    }
}