6

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

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

它来自这一行,我正在删除一个无符号字符数组;

delete [] broadMAC;

可以保持原样吗?如果不能,我该如何改进?

谢谢。

更新

BroadMAC 是如何声明的?

从之前的大约 10 行开始;

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

destMAC 也是一个无符号字符数组,其中存储了值。我需要将它们复制出来,用 destMAC 做一些事情,然后恢复原始值;所以我已经声明了broadMAC,并希望在之后将其删除。

4

3 回答 3

13

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

unsigned char broadMAC[6];

然后你打电话

delete[] broadMAC;

这是错误的,因为您没有将其分配给new[].

在未分配 / 的内存上使用delete/会导致未定义的行为,并且您的编译器足够聪明,可以在这种情况下进行判断。delete[]newnew[]

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

于 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 回答