2012-10-29 45 views
5

我的代碼編譯沒有錯誤,但這是什麼意思?C++;在編譯期間「默認啓用」的警告是什麼意思?

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

它從這一行,我刪除一個無符號字符數組;

delete [] broadMAC; 

可以保留原樣,如果不是這樣,我該如何改進?

謝謝。

UPDATE

如何broadMAC聲明?

從前面的10行開始;

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

destMAC也是一個無符號字符數組,其值存儲在裏面。 我需要將它們複製出來,用destMAC做一些事情,然後恢復原始值;所以我已經宣佈broadMAC並希望在刪除之後。

+0

如何broadMAC聲明? –

+0

好點,我會加入! – jwbensley

+0

好吧,現在很明顯:請參閱Luchian的回答 –

回答

2

G ++允許通過在命令行上指定許多警告(例如-Wctor-dtor-privacy,-Woverloaded-virtual,-W...)來啓用和禁用許多警告。有些警告是啓用的,不需要在命令行上這樣做,其他的必須明確要求。

所以,一些警告是:

「默認情況下啓用」 的,有些是:

「默認情況下禁用」

+0

我不確定它曾經說過「默認禁用」。相反,對於通常禁用的選項,編譯器將打印選項*的*名稱,該名稱控制相關診斷的顯示。如果您不希望編譯器告訴您有關情況,請在編譯時使用'-fno-diagnostics-show-option'選項。 –

+0

描述什麼「默認啓用」沒有指出代碼調用未定義的行爲可能有點過於字面答案。 :) – Yakk

+1

@Yakk當我寫下我的答案時,Luchian Grigore已經爲缺點提供了一個完美的答案。所以,重複他的工作是沒有意義的。 –

13

broadMAC在自動分配內存,就像這樣:

unsigned char broadMAC[6]; 

然後調用

delete[] broadMAC; 

這是不對的,因爲你沒有用new[]分配它。

使用上內存delete/delete[]new/new[]結果不確定的行爲分配的,你的編譯器是足夠聰明,在這種情況下告訴。

您不用擔心釋放內存,它會自動釋放。

+0

Thanks @ Luchian Grigore,這是一些很好的信息!我被「默認啓用」消息弄得更加困惑,但這對了解導致我的編譯器捕獲並生成消息的原因以及如何緩解它,仍然很重要,所以謝謝! +1 – jwbensley

2

你試圖釋放你在堆棧中分配的數組,而不是堆。所以當變量超出範圍時,它將自行釋放,你不應該/不能明確地釋放它。

+0

嗨@JosephH,請參閱我對Luchian Grigore的評論,這就是爲什麼我將Olaf Dietsche標記爲正確的,但再次感謝您也有一些很好的知識! :) – jwbensley

相關問題