如何通过fsanitize = address使用gcc?

时间:2019-10-07 02:12:10

标签: c gcc memory-leaks

我正在尝试学习如何使用-fsanitize=address -fno-omit-frame-pointer检测内存泄漏。我写了一些简单的东西,显然其中有内存泄漏,但是用gcc -fsanitize=address -fno-omit-frame-pointer file.c进行编译然后执行该函数似乎没有问题。

这篇文章似乎表明我们需要在底部设置编译器标志和链接器标志,而不要使用-lasan How to use AddressSanitizer in gcc?

我认为没有必要,但是我尝试了gcc -fsanitize=address -static-libasan -fno-omit-frame-pointer s.c,因为文档似乎在这里提到了。 https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

我还尝试了以下操作:https://lemire.me/blog/2016/04/20/no-more-leaks-with-sanitize-flags-in-gcc-and-clang/

只要有必要,我就使用MacOS。我已经通过brew更新和升级了gcc。版本信息是: Apple LLVM version 10.0.1 (clang-1001.0.46.4)

这是我写的虚拟代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    char *buffer = malloc(1024);
    sprintf(buffer, "%d", argc);
    printf("%s\n", buffer);
    buffer = malloc(10);
    buffer[0] = 'A';
    buffer[9] = '\0';
    printf("%s\n", buffer);
}

我从来没有释放过任何东西,所以我希望地址清理器能够捕获它。但是当我运行代码时,我得到以下信息:

$ ./s
1
A????????

我误解/做错了什么?

0 个答案:

没有答案