1

I am getting the std::bad alloc() exception in a code I have written. According to other answers on SO, I should free the dynamically allocated memory but the exception remains. Any leads on how I can solve it?

I am attaching the function where the error comes.

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; }

I am basically trying to solve the coin exchange problem. n can be as big as 10^9.

TheBlueNotebook
  • 1,204
  • 3
  • 15
  • 35

1 Answers1

2

Notice when you allocate table you do it in two steps. You allocate table and then each element of table. To release all the memory you must also use two steps, each table element and finally table itself.

Change your cleanup to something like:

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

...or just use std::vector and avoid manual memory management.

Blastfurnace
  • 18,411
  • 56
  • 55
  • 70