0

Valgrind 抱怨 new (第一个)的行:

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

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

4

1 回答 1

0

你可以简化你的 if-else

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

delete 运算符忽略 NULL 参数(if这样可以避免很多 s。我个人不会在 new 之前影响 NULL ,但如果您愿意,我可以理解。

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

lg_maxi_buf = new unsigned char[MAXI_BUF_SIZE]();
于 2013-09-02T11:49:58.963 回答