== 24303 ==未初始化的值是由堆分配创建的

时间:2013-09-01 18:14:45

标签: c++ g++-4.7

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;

感谢您的回答。我想我将不得不使用智能指针,但我对它们的了解非常差。

1 个答案:

答案 0 :(得分:0)

你可以在

中简化你的if-else
delete [] lg_maxi_buf ;
lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE] ;

delete运算符忽略NULL参数(这样可以避免许多if。 我个人在新的之前不会影响NULL,但我明白你是否愿意。

要初始化这个内存块,只需添加括号:

lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE]();