AddressSanitizer 不会跟踪全局变量的内存泄漏吗?
Does not AddressSanitizer trace memory leak from global variable?
我正在尝试将 -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).
我想知道为什么消毒剂不适用于全局变量...
谢谢,希望有人知道。
ps。我的系统是 ubuntu 18.04 和 x86_64.
类似于 Valgrind LeakSanitizer 仅报告 "direct" 泄漏,即无法再从任何现有用户数据访问的地址(在 LSan design document 中称为 "root-set")。如果是全局变量,地址显然仍然可以访问。
我正在尝试将 -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).
我想知道为什么消毒剂不适用于全局变量...
谢谢,希望有人知道。
ps。我的系统是 ubuntu 18.04 和 x86_64.
类似于 Valgrind LeakSanitizer 仅报告 "direct" 泄漏,即无法再从任何现有用户数据访问的地址(在 LSan design document 中称为 "root-set")。如果是全局变量,地址显然仍然可以访问。