我在我编写的代码中得到了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。
答案 0 :(得分:2)
请注意,当您分配table
时,请在两个步骤中执行此操作。您分配table
,然后分配table
的每个元素。要释放所有内存,您还必须使用两个步骤,每个table
元素,最后使用table
本身。
将您的清理更改为:
for(int q=0;q< n+1;q++) {
delete[] table[q];
}
delete[] table;
...或者只使用std::vector
并避免手动内存管理。