Утечка памяти в 2D-массиве - должно быть легко, я чувствую себя глупо - PullRequest
2 голосов
/ 25 августа 2011

Очень простой код:

signed int **ifftResults = (signed int **)malloc(sizeof(signed int *) * recordsPerBuffer);

for (int i=0; i < recordsPerBuffer; i++)
{
    ifftResults[i] = (signed int*)malloc(sizeof(signed int) * fftLength);
}

Потом позже:

for (int i=0; i < recordsPerBuffer; i++)
{
   free(ifftResults[i]);
}
free(ifftResults);

Когда я комментирую эти строки - нет утечки памяти. Когда они присутствуют - утечка памяти. Надеюсь, мне просто нужна другая пара глаз, потому что я не могу на всю жизнь увидеть, что не так.

1 Ответ

4 голосов
/ 25 августа 2011

Код, представленный во время написания, кажется недостаточным для ответа на вопрос «почему».

Однако, так как вы используете C ++, вы можете убедиться в отсутствии утечки памяти, используя std::vector.

Вот так:

// Allocation.
std::vector< std::vector< int > >  fftResults( recordsPerBuffer, std::vector< int >( fftLength ) );

// Usage:
fftResults[y][x] = blah;

// Deallocation: automatic.

Другой способ реализовать матрицу - это

std::vector< int >  fftResults( recordsPerBuffer*fftLength );

и затем вычислить индекс для данного (x, y).

Приветствия & hth.,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...