簡體   English   中英

如何在gcc / mingw中進行邊界檢查?

[英]How to boundary check in gcc / mingw?

試過這個

int main(void){

int a [10]; 一個[20] = 5;

}

gcc -Wall -O2 main.c

它沒有給我任何警告......

它是windows(mingw)中的gcc,我無法檢測到這種邊界限制錯誤

如何告訴編譯器檢查它? 可以搞定嗎?

謝謝

有嘗試處理數組邊界檢查。 默認情況下,santdard C99沒有提到強制執行數組邊界,我相信很大程度上是因為它有更多的開銷。

話雖如此,你可以看看這樣的網站,人們試圖處理它:

http://williambader.com/bounds/example.html

這個問題已經很老了,但我想我得到的另一個答案。 即使你打算在gcc上做一個完整的構建,你也可以嘗試使用clang編譯器(例如,在大型項目中進行夜間構建)。 它工作得很好。

一個例子是我嘗試訪問索引4時的輸出,其中數組大小聲明為4:

    ex9.c:17:2: warning: array index 4 is past the end of the array (which contains
          4 elements) [-Warray-bounds]
            numbers[4] = 4;
            ^       ~
    ex9.c:4:2: note: array 'numbers' declared here
            int numbers[4] = {0};
            ^

謝謝Kajal

還有其他非編譯器工具可以使用靜態分析來查找數組邊界違規等錯誤。 之前的SO問題討論了其中的一些問題 請注意,如果您需要在可能限制您的選擇的mingw環境中運行。

暫無
暫無

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

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