簡體   English   中英

零大小的數組?

[英]Array of zero size?

通常,我們以以下格式聲明數組:

DataType array_name[SIZE];

所以如果我嘗試為例如創建0長度數組

int arr[0]; //Line#1
arr[0] = 5; //Line#2

執行上面的代碼時我沒有收到任何錯誤。在這種情況下,是否為單個整數分配了內存?

為什么Line#1不會產生任何編譯錯誤?
理想情況下,應該!
在本地存儲上創建大小為0的數組不是合法的代碼。
理想情況下,編譯器應該向您發出錯誤消息,可能是某些編譯器擴展允許它編譯,但按照標准,這不是有效的-pedantic 。請嘗試使用-pedantic編譯。

參考:

C ++ 03標准8.3.4 / 1:

如果存在_constant-expression +(5.19),則它應為整數常量表達式,並且其值應大於零。

進一步,
為什么Line#2不會產生任何編譯錯誤?
因為超出分配數組范圍的寫入操作是Undefined Behavior 未定義行為不需要編譯器為您提供任何診斷。 請注意,一旦代碼表現出未定義的行為,任何事情都可能發生,所有的賭注都將關閉。

您不會得到任何錯誤,因為C / C ++不會對數組進行任何范圍檢查。 arr[10000000]也不會給您編譯錯誤。

發生的情況是,您正在將某些內存寫入不屬於arr的堆棧中的某些位置,並且誰知道會發生什么。 這可能會導致訪問沖突並崩潰或隨機破壞某些其他數據結構。

那是緩沖區溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM