gcc - 为什么 LSan(使用 gcc)找不到由 mmap 分配的内存泄漏?
问题描述
我用下面的代码测试了它
// main.c
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
int main() {
int* ptr1 = (int*)malloc(1);
int* ptr2 = (int*)mmap(0, 4096*10, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
}
我像下面那样构建并运行它
结果显示 LSan 只发现了 malloc 泄漏
是否有任何选项可以强制它使用 mmap 查找泄漏或 LSan 只是为了这样做而设计的?
$ gcc -fsanitize=address -O0 main.cpp
$ ASAN_OPTIONS=detect_leaks=1 ./a.out
=================================================================
==14654==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 1 byte(s) in 1 object(s) allocated from:
#0 0x7fc1054f0b50 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdeb50)
#1 0x55c984e2283b in main (/home/work/a.out+0x83b)
#2 0x7fc105042b96 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
SUMMARY: AddressSanitizer: 1 byte(s) leaked in 1 allocation(s).
解决方案
我从 LSan github 得到了答案
如果有人想知道 LSan 为什么有这个政策,请参考下面的链接
推荐阅读
- python - 如何更改数据框中的不同值
- vim - 使用 astyle 格式化 Vim 代码(vimrc 中的 formatprg)
- reactjs - 带有 react-final-form 插件的 Netlify 表单提交空白
- reactjs - 如何解决 React 问题组件正在更改要控制的文本类型的不受控制的输入
- python - 无法安装 numpy
- excel - 遍历图像列表,如果找不到则使用回退?
- python - 这个 MySQL 查询是否等同于这个 Django 查询
- sql - 在oracle中将字符串转换为所需的时间戳格式
- pandas - 数据帧连接中的错误“预期元组,得到 str”
- c++ - 在 c++ 中将一长串字符转换为 uint32_t 或 uint64_t