Как проверить границу в gcc / mingw? - PullRequest
4 голосов
/ 10 июня 2010

Попробовав это

int main (void) {

int a [10];а [20] = 5;

}

gcc -Wall -O2 main.c

Это не дает мне предупреждения ...

Это gcc в Windows (mingw) и я не могу обнаружить этот тип ошибки предела границы

как сказать компилятору проверить это?может Mingw сделать это?

спасибо

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Есть попытки справиться с проверкой границ массива.По умолчанию santdard C99 ничего не говорит о принудительном применении границ массива, я полагаю, что в основном это связано с большими накладными расходами.

При этом вы можете посмотреть на такие сайты, где люди пытались разобраться с этим:

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

1 голос
/ 14 июля 2013

Вопрос довольно старый, но я думаю, что другой ответ, который я получил здесь. Даже если вы планируете сделать полную сборку на gcc, вы можете попробовать компилировать (например, для ночных сборок в больших проектах). Это сработало довольно хорошо.

Примером является вывод, когда я пытался получить доступ к индексу 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

1 голос
/ 10 июня 2010

Существуют и другие некомпиляторные инструменты, которые могут использовать статический анализ для поиска ошибок, таких как нарушения границ массива.Предыдущий SO вопрос обсуждает некоторые из них.Имейте в виду, если вам нужно работать в среде Mingw, которая может ограничить ваш выбор.

...