我正在实现一个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的增长,它将重新为其内容分配内存,并使您之前发出的所有指针无效。

10-08 12:06