6

私のコードはエラーなしでコンパイルされますが、これはどういう意味ですか?

 etherate.cpp:432:11: warning: deleting array ‘unsigned char broadMAC [6]’ [enabled by default]

この行から、unsigned char 配列を削除しています。

delete [] broadMAC;

このままでいいですか、そうでない場合、どうすればこれを改善できますか?

ありがとう。

アップデート

BroadMAC はどのように宣言されますか?

約10行前から;

unsigned char broadMAC[6] = {destMAC[0], destMAC[1], destMAC[2], destMAC[3], destMAC[4], destMAC[5]};

destMAC は、内部に値が格納された unsigned char 配列でもあります。それらをコピーし、destMAC で何かをしてから、元の値を復元する必要がありました。そのため、broadMAC を宣言しましたが、後で削除したいと考えています。

4

3 に答える 3

13

broadMAC次のように、自動メモリに割り当てられます。

unsigned char broadMAC[6];

そして、あなたは電話します

delete[] broadMAC;

で割り当てていないため、これは間違っていますnew[]

delete/delete[]で割り当てられていないメモリでnew/を使用new[]すると、未定義の動作が発生し、コンパイラはこの場合に通知するのに十分スマートです。

メモリの解放について心配する必要はありません。自動的に解放されます。

于 2012-10-29T13:34:34.427 に答える
3

G++ では、コマンド ラインで指定することにより、多くの警告 ( -Wctor-dtor-privacy-Woverloaded-virtual、 など)を有効または無効にすることができます。-W...コマンド ラインで有効にする必要がない警告もあれば、明示的に要求する必要がある警告もあります。

したがって、いくつかの警告は次のとおりです。

「デフォルトで有効」

いくつかは次のとおりです。

「デフォルトで無効」

于 2012-10-29T13:39:59.550 に答える
2

ヒープではなく、スタックに割り当てたアレイを解放しようとしています。したがって、変数がスコープ外になると、変数自体が解放されるため、明示的に解放することはできません。

于 2012-10-29T13:35:00.100 に答える