dli*_*168 5 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);
}
Run Code Online (Sandbox Code Playgroud)
我从未释放过任何东西,所以我希望地址清理程序能够捕获它。但是当我运行代码时,我得到以下信息:
$ ./s
1
A????????
Run Code Online (Sandbox Code Playgroud)
我误解/做错了什么?
归档时间: |
|
查看次数: |
28424 次 |
最近记录: |