我在C ++中遇到一个非常严重的问题。这是我的功能
double** Fun1(unsigned l,unsigned n, vector<int>& list,
vector<string>& DataArray)
{
double** array2D = 0;
array2D = new double*[l];
string alphabet="ACGT";
for (int i = 0; i < l; i++)
{
array2D[i] = new double [4];
vector<double> count(4, 0.0);
for(int j=0;j<n;++j)
{
for(int k=0;k<4;k++)
{
if (toupper(DataArray[list[j]][i])==alphabet[k])
count[k]=count[k]+1;
}
}
for(int k=0;k<4;k++)
array2D[i][k]=count[k];
count.clear();
}
return array2D;
}
l的值大约为100,n = 1,DataArray大小为(50000 x l),list将包含0-49999之间的任何一个数字。 现在我从我的主程序中多次调用此函数(可能超过5000万次)。一定次数它会非常顺利但是在2/3分钟后我的系统会挂起。我无法找到此代码的问题。我想记忆越来越短但不知道为什么?
答案 0 :(得分:3)
您的代码中缺少相应的delete[]
。
请注意[]
,表示您正在删除数组。如果你忘记添加这些,你将冒险进入未定义的领域(N3797中的3.7.4.2)。
您可能希望尝试使用std::array
来减轻对new
和delete[]
的影响。如果这个被调用的次数和你说的那么小,我会关注数据的一致性。
答案 1 :(得分:0)
它不挂。如果您正在使用达到一定次数它会非常顺利但是在2/3分钟之后 我的系统挂起
linux
或unix
机器检查top (system performance)
。系统的虚拟内存已满。每delete
适当地delete[]
或new