为什么这个Rust二叉树在测试中溢出了堆栈?

时间:2018-06-30 22:33:48

标签: rust rust-cargo

我已经编写了一个二进制树状结构,但是在某些压力测试中却遇到了堆栈溢出错误。我已将引起错误的代码减少到以下内容:     结构节点{         索引:usize,         右:Option>,     }

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();
    }
}

跑步cargo test给我:

running 1 test

thread 'tests::mytest' has overflowed its stack
fatal runtime error: stack overflow
error: process didn't exit successfully: ...

由于所有数据似乎都分配在堆上,并且没有递归,因此我不理解这段代码是如何导致堆栈溢出的。

即使是陌生人,即使cargo testcargo run调用相同的代码,该代码也会在我运行mytest时导致溢出,而​​在我运行main时不会导致溢出。 / p>

这是怎么了?

0 个答案:

没有答案