我正在实现一个Barnes-Hut模拟程序,并具有以下简短代码段:
BhTree *BhTree::make() {
return new BhTree();
}
其余的代码(大量)则可以很好地工作。在程序生命周期中,创建的节点从不删除。利用这个事实,我想使用以下方法优化分配:
vector<BhTree> mSpace;
BhTree *BhTree::make() {
mSpace.push_back(BhTree());
return &mSpace[mSpace.size()-1];
}
这会导致在代码的不相关部分中出现可怕的分段错误。有趣的是,在递归函数中,
this
突然转换为0xfeeefeee
,即用于释放堆内存的Microsoft代码。任何人都可以立即看到问题所在吗? vector
mSpace
是,从未在其他位置访问过。 最佳答案
随着std::vector
的增长,它将重新为其内容分配内存,并使您之前发出的所有指针无效。