【发布时间】:2011-11-22 14:32:17
【问题描述】:
我试图将值覆盖到我的向量中:
for (i = 0; i < 50; i++)
{
LJ.clear();
LJ.reserve(210);
//Calculate Lennard-Jones potential of every pair
for(itr = 0; itr < 210; itr++)
{
term1 = pow(r[itr], 12);
term1 = 1/term1;
term2 = pow(r[itr], 6);
term2 = 2/term2;
LJ.push_back(term1 - term2);
}
//Calculate the initial Energy in the system Ei
Ei = accumulate(LJ.begin(), LJ.end(), 0.0);
Ei = Ei/2;
cout << Ei << endl;
}
但是,每当我遇到循环两次时,向量的容量都会得到一些垃圾值,当我尝试将一个项目推入时,我遇到了分段错误......如果我离开了我们的保留部分,我仍然有一个段错误
【问题讨论】:
-
您不需要在外循环的每次迭代中都使用
reserve,因为vec.clear()被定义为vec.erase(vec.begin(), vec.end()),这不会减少容量。另外,“每当我遇到循环两次”是什么意思? -
向我们展示 r 及其人口的代码。
-
r的定义是什么? -
对我来说运行良好codepad.org/vXpHI0Ro
-
另外,如果 term2 曾经等于 0,你会得到一个除以 0 的结果,这很可能会崩溃
标签: c++ vector segmentation-fault