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 :(得分:0)
你可以在
中简化你的if-elsedelete [] 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]();