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