【发布时间】:2018-01-23 17:32:45
【问题描述】:
我对 C++ 比较陌生,我的项目遇到了问题。 我运行了以下代码几次没有问题,但是现在当我尝试运行它时,它给了我一个 std::bad_alloc 错误。代码是 C++,但有些行是 ROOT 独有的,ROOT 是为粒子物理学家用 C++ 编写的程序。
class Particle {
public:
int pdgid;
float px;
Particle(int pdg, float px){
pdgid = pdg;
px = px;
}
};
TFile* file = new TFile("filename.root"); //ROOT code, where particle values are obtained from.
TTree* tree = (TTree*)file->Get("FlatTree"); //tree is where all events and associated values are held
vector<Particle> allparticles;
for (unsigned iEntry = 0; iEntry<tree->GetEntries(); iEntry++) {
tree->GetEntry(iEntry);
for (int iVecEntry = 0; iVecEntry < nfsp; iVecEntry++) {
allparticles.push_back(Particle(pdg[iVecEntry],px[iVecEntry]));
}
}
如果我减少第一个 for 循环的限制,代码就可以工作。条目的数量非常大(超过 200 万),根据事件,nfsp 最多可达到 24 个。这导致矢量 allparticles 具有超过 700 万个 Particle 对象。
我认为问题在于没有足够的内存来分配如此大的向量,但以前是如何工作的?有没有可能是我前几次运行代码时没有正确释放内存?
我对内存管理有点困惑。在 C++ 中,操作系统是否处理释放?还是我必须包含一个析构函数?
我尝试包含一个析构函数,但无法让它工作。 从"std::bad_alloc": am I using too much memory? 我尝试在代码末尾包含一个 delete[] 语句,但这也不起作用。
非常感谢任何输入和帮助!
附:我正在运行 linux mint 18.2 Sonya。
【问题讨论】:
标签: c++ memory-management bad-alloc