== 24303 == Неинициализированное значение было создано выделением кучи

Valgrind жалуется на строку с новым (первым):

     #ifndef MAXI_BUF_SIZE
#define MAXI_BUF_SIZE 2*8192
#endif

if (lg_maxi_buf == NULL)
{
lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE] ;
}
else
{
delete [] lg_maxi_buf ;
lg_maxi_buf = NULL ;
lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE] ;
}

Я хотел объяснить, что поле lg_maxi_buf является частью класса Audio_decoder и объявлен так:

unsigned char *lg_maxi_buf;

в конструкторе класса Audio_decoder lg_maxi_buf инициализируется следующим образом:

lg_maxi_buf = NULL;

Спасибо за ваши ответы. Я думаю, что мне придется использовать умные указатели, но мои знания о них очень скудны.

0

Решение

Вы могли бы упростить свой if-else в

delete [] lg_maxi_buf ;
lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE] ;

Оператор удаления игнорирует NULL-параметры (вы избегаете многих ifтак.
Я лично не влияю на NULL до нового, но я понимаю, если вы предпочитаете.

Чтобы инициализировать этот блок памяти, просто добавьте круглые скобки:

lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE]();
0

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

Других решений пока нет …

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