【发布时间】:2012-10-29 21:45:22
【问题描述】:
我的代码编译没有错误,但这意味着什么?
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并希望在之后删除它。
【问题讨论】:
-
好点,我会添加这个!
-
好吧,现在很明显:请参阅 Luchian 的回答
-
“默认启用”表示即使您没有启用警告,编译器也会生成此警告。那是因为在没有分配
new[]的东西上使用delete[]总是一个错误,所以你总是希望得到警告。 -
broadMAC 的声明与这个问题无关,@Zdeslav。 (此外,警告已经告诉我们它的声明是什么。)
-
“可以保持原样吗?如果不行,我该如何改进?” ——不,不能保持原样。您可以通过不尝试从堆中删除存储在堆栈上的数组来改进它。 :) (即,不要在堆栈/自动存储变量上调用 delete —— 只在你用 new 分配的东西上调用 delete)
标签: c++ compiler-warnings