Ложный минус с адресом дезинфицирующего средства?
Рассмотрим код ниже. Ошибка не отображается, когда я компилирую и запускаю его с помощью 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).