Что я сделал.
Тест1
1 #include <stdio.h>
2
3 int test[16];
4
5 int main()
6 {
7 test[17] = -1;
8 }
/tmp $ gcc ./main.c -o main -fsanitize=address
/tmp $ ./main
/tmp $
Тест2
1 #include <stdio.h>
2
3 int test[16] = {1};
4
5 int main()
6 {
7 test[17] = -1;
8 }
/tmp $ gcc ./main.c -o main -fsanitize=address
/tmp $ ./main
=================================================================
==19776==ERROR: AddressSanitizer: global-buffer-overflow on address
...
Похоже, не работает обнаружение переполнения глобального буфера для глобальных переменных, размещенных в bss (так ли это?). Каковы причины этого?
Обновление:
Код, который хранится, не оптимизирован. Системная информация:
$ gcc --version
gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
clang
? - person Jean-François Fabre   schedule 19.04.2018volatile
нет наблюдаемого поведения), но я был бы удивлен, когда это зависит от того, инициализирована ли переменная или нет... - person   schedule 19.04.2018