Как решить ошибку выполнения alloc () во время выполнения?

Я получаю исключение 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

Решение

Обратите внимание, когда вы выделяете table ты делаешь это в два шаги. Вы выделяете table а затем каждый элемент table, Чтобы освободить всю память, вы также должны использовать два шаги, каждый table элемент и, наконец, table сам.

Измените свою очистку на что-то вроде:

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

…или просто использовать std::vector и избегайте ручного управления памятью.

2

Другие решения


По вопросам рекламы [email protected]