我的代码编译没有错误,但这是什么意思?
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并希望在之后删除它。
答案 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)
你试图释放你在堆栈中分配的数组,而不是堆。因此,当变量超出范围时,它将自行释放,您不应该/不能明确释放它。