Я пытаюсь использовать -fsanitize=address
с gcc
.
Я объявляю глобальную переменную (например, int*
) и выделяю память с помощью malloc, тогда я не вызывал свободную функцию. Я ожидаю, что дезинфицирующее средство покажет сообщение об ошибке утечки памяти, но оно завершается без сообщения об ошибке.
Итак, я использую локальную переменную для теста. Sanitizer хорошо работает с этим тестовым кодом. Я поставил свои коды ниже.
это код глобальной переменной.
#include<stdio.h>
#include<stdlib.h>
int *gv;
int main(){
gv = (int*)malloc(sizeof(int)*4);
printf("yooooolooooooo\n");
return 0;
}
и это код локальной переменной.
#include<stdio.h>
#include<stdlib.h>
int main(){
int *gv = (int*)malloc(sizeof(int)*4);
printf("yooooolooooooo\n");
return 0;
}
Я компилирую с gcc -fsanitize=address -o test test.c
.
верхний код показывает мне просто
yooooolooooooo
но код локальной переменной показывает
yooooolooooooo
=================================================================
==15484==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 16 byte(s) in 1 object(s) allocated from:
#0 0x7f6e43395b60 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xedb60)
#1 0x564b5f8bd936 in main (/home/jiho/lab/test+0x936)
#2 0x7f6e42ed8b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
SUMMARY: AddressSanitizer: 16 byte(s) leaked in 1 allocation(s).
Интересно, почему sanitizer не работает с глобальной переменной ...
спасибо, и я надеюсь, что кто-то знает об этом.
пс. моя система Ubuntu 18.04 и x86_64.