Ложный минус с адресом дезинфицирующего средства?

Рассмотрим код ниже. Ошибка не отображается, когда я компилирую и запускаю его с помощью sanitizer адреса. Но должно быть ошибочное право, т. Е. Назначение / доступ за пределы памяти? Почему адрес sanitizer не обнаруживает это?

int arr[30];

int main(){
    arr[40] = 34;
    printf(“%d”, arr[40]);
}

Спасибо!

clang -fsanitize=address -fno-omit-frame-pointer test.c
./a.out

1 ответ

Это описывается следующей записью в FAQ:

Q: Why didn't ASan report an obviously invalid memory access in my code?

A1: If your errors is too obvious, compiler might have already optimized it 
    out by the time Asan runs.

A2: Another, C-only option is accesses to global common symbols which are
    not protected by Asan (you can use -fno-common to disable generation of
    common symbols and hopefully detect more bugs).
Другие вопросы по тегам