【发布时间】:2015-04-23 23:37:34
【问题描述】:
我实现了一个树结构:
use std::collections::VecDeque;
use std::rc::{Rc, Weak};
use std::cell::RefCell;
struct A {
children: Option<VecDeque<Rc<RefCell<A>>>>
}
// I got thread '<main>' has overflowed its stack
fn main(){
let mut tree_stack: VecDeque<Rc<RefCell<A>>> = VecDeque::new();
// when num is 1000, everything works
for i in 0..100000 {
tree_stack.push_back(Rc::new(RefCell::new(A {children: None})));
}
println!("{:?}", "reach here means we are not out of mem");
loop {
if tree_stack.len() == 1 {break;}
let mut new_tree_node = Rc::new(RefCell::new(A {children: None}));
let mut tree_node_children: VecDeque<Rc<RefCell<A>>> = VecDeque::new();
// combine last two nodes to one new node
match tree_stack.pop_back() {
Some(x) => {
tree_node_children.push_front(x);
},
None => {}
}
match tree_stack.pop_back() {
Some(x) => {
tree_node_children.push_front(x);
},
None => {}
}
new_tree_node.borrow_mut().children = Some(tree_node_children);
tree_stack.push_back(new_tree_node);
}
}
但它崩溃了
thread '<main>' has overflowed its stack
我该如何解决这个问题?
【问题讨论】:
-
欢迎来到 Stack Overflow!要获得最佳质量的答案,请查看How do I ask a good question?。在这种特殊情况下,您应该包含内联代码,而不仅仅是指向它的链接(链接可能会失效,然后未来的程序员将无法受益!)。不要只是发布所有代码!相反,构造一个MCVE 来缩小问题范围并让回答者更容易。您应该只提出一个问题,并对意见问题(“最佳实践”)保持谨慎,因为它们超出了本网站的范围。
标签: rust