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 に答える