我正在创建一个粒子物理模拟器,我需要进行适当的内存管理。
我发现我的方法一次传播几个粒子很方便,所以这个方法返回一个轨迹向量,每个轨迹是一个 Steps 向量(因此得到 a vector< vector<> >
)。
(Step 是我创建的一个类。)
vector< vector<Step*> > Propagator::Propagate (vector<TParticle*> vpart) {
vector< vector<Step*> > = vvsteps;
//vvsteps goes through physics and gets filled using push_back
//all of vvsteps' entries were filled with objects created with "new"
return vvsteps;
}
每个 Step 创建一个指向 TParticle 的指针向量(使用 new 创建),并具有以下析构函数来释放它。
vector<TParticle*> vpart;
Step::~Step() {
for(int i=0; i<vpart.size(); i++) delete vpart[i];
vpart.clear();
}
在我得到我想要的东西后,我尝试通过执行以下操作来释放整个事情:
vector< vector<Step*> > vvstep = prop->Propagate(vpart);
/*PHYSICS GOES HERE*/
for(int i=0; i<vvstep.size(); i++) {
for(int j=0; j<vvstep[i].size(); j++)
delete (vvstep[i])[j];
vvstep[i].clear();
}
vvstep.clear();
由于某种原因,此代码不起作用。它给了我以下错误
*** glibc detected *** bin/rtest.exe: double free or corruption (fasttop): 0x0f7207f0 ***
编辑:更正了一个错字,该类名为 Step 而不是 Steps。