如何解决错误的alloc()运行时错误?

时间:2014-09-27 13:49:59

标签: c++ algorithm bad-alloc coin-change

我在我编写的代码中得到了std :: bad alloc()异常。根据SO的其他答案,我应该释放动态分配的内存,但异常仍然存在。关于我如何解决它的任何线索?

我正在附加错误所在的函数。

  

int count(int * S,int m,int n){    int i,j,x,y;

// We need n+1 rows as the table is consturcted in bottom up manner using 
// the base case 0 value case (n = 0)
int **table=new int*[n+1];
for(int q=0;q< n+1;q++)
  table[q] = new int[m];

// Fill the enteries for 0 value case (n = 0)
for (i=0; i<m; i++)
    table[0][i] = 1;

// Fill rest of the table enteries in bottom up manner  
for (i = 1; i < n+1; i++)
{
    for (j = 0; j < m; j++)
    {
        // Count of solutions including S[j]
        x = (i-S[j] >= 0)? table[i - S[j]][j]: 0;

        // Count of solutions excluding S[j]
        y = (j >= 1)? table[i][j-1]: 0;

        // total count
        table[i][j] = x + y;
    }
}
int answer = table[n][m-1];
delete[] table;
return answer; }

我基本上是在努力解决硬币交换问题。 n可以大到10 ^ 9。

1 个答案:

答案 0 :(得分:2)

请注意,当您分配table时,请在两个步骤中执行此操作。您分配table,然后分配table的每个元素。要释放所有内存,您还必须使用两个步骤,每个table元素,最后使用table本身。

将您的清理更改为:

for(int q=0;q< n+1;q++) {
  delete[] table[q];
}
delete[] table;

...或者只使用std::vector并避免手动内存管理。