1

我在编写的代码中收到 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。

4

1 回答 1

2

请注意,当您分配时,您table分两步进行。您分配table,然后分配table. 要释放所有内存,您还必须使用两个步骤,每个table元素,最后是table自身。

将您的清理更改为:

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

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

于 2014-09-27T14:05:49.220 回答