C ++;在编译期间,警告“默认启用”是什么意思?

时间:2012-10-29 13:32:07

标签: c++ compiler-warnings

我的代码编译没有错误,但这是什么意思?

 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并希望在之后删除它。

3 个答案:

答案 0 :(得分:13)

broadMAC分配在自动内存中,如下所示:

unsigned char broadMAC[6];

然后你打电话

delete[] broadMAC;

这是错误的,因为你没有用new[]分配它。

在未使用delete / delete[]分配的内存上使用new / new[]会导致未定义的行为,并且您的编译器在这种情况下足够智能。

你不必担心释放内存,它会自动释放。

答案 1 :(得分:3)

G ++允许通过在命令行上指定它们来启用和禁用许多警告(例如-Wctor-dtor-privacy-Woverloaded-virtual-W...)。启用了一些警告,无需在命令行上执行此操作,必须明确请求其他警告。

所以,有些警告是:

  

“默认启用”

有些是:

  

“默认禁用”

答案 2 :(得分:2)

你试图释放你在堆栈中分配的数组,而不是堆。因此,当变量超出范围时,它将自行释放,您不应该/不能明确释放它。