C ++重复调用一个函数系统挂起

时间:2016-04-19 04:48:33

标签: c++ memory vector

我在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分钟后我的系统会挂起。我无法找到此代码的问题。我想记忆越来越短但不知道为什么?

2 个答案:

答案 0 :(得分:3)

您的代码中缺少相应的delete[]

请注意[],表示您正在删除数组。如果你忘记添加这些,你将冒险进入未定义的领域(N3797中的3.7.4.2)。

您可能希望尝试使用std::array来减轻对newdelete[]的影响。如果这个被调用的次数和你说的那么小,我会关注数据的一致性。

答案 1 :(得分:0)

  

达到一定次数它会非常顺利但是在2/3分钟之后   我的系统挂起

它不挂。如果您正在使用linuxunix机器检查top (system performance)。系统的虚拟内存已满。每delete

适当地delete[]new