【发布时间】:2014-05-08 20:13:55
【问题描述】:
我正在实现一个 Barnes-Hut 模拟程序,并且有这个简短的 sn-p 代码:
BhTree *BhTree::make() {
return new BhTree();
}
代码的其余部分(大量)然后工作得很好。创建的节点在程序生命周期内从不删除。利用这个事实,我想通过以下方式优化分配:
vector<BhTree> mSpace;
BhTree *BhTree::make() {
mSpace.push_back(BhTree());
return &mSpace[mSpace.size()-1];
}
这会导致代码中不相关的部分出现可怕的分段错误。有趣的是,在一个递归函数中,this 突然变成了0xfeeefeee,这是用于释放堆内存的 Microsoft 代码。
任何人都可以立即看出问题所在吗?向量mSpace从不在其他地方访问。
【问题讨论】:
-
你在哪里定义
mSpace?Bhtree的静态成员?全局变量? -
你也可以返回一个索引,并通过
mSpace中的索引引用BhTree。
标签: c++ segmentation-fault fault