- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
GCC 8.2.0 未检测到使用 -fsanitize=address
编译的以下代码中的泄漏:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *str1 = "tok1:val2";
char *str1_dup = strndup(str1, strlen(str1));
char *str1_dup_head = str1_dup;
char *tok1 = strsep(&str1_dup, ":");
// What should be done to avoid the memory leak
//free(str1_dup_head);
return 0;
}
但是,在以下情况下会检测到泄漏:
-fsanitize=leak
编译clang -fsanitize=address
编译strsep()
(str1_dup_cpy
) 的指针头部的副本未保留时(参见下面的代码)#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *str1 = "tok1:val2";
char *str1_dup = strndup(str1, strlen(str1));
//char *str1_dup_head = str1_dup;
char *tok1 = strsep(&str1_dup, ":");
// What should be done to avoid the memory leak
//free(str1_dup_head);
return 0;
}
知道为什么会出现这种行为吗?它应该被 -fsanitize=address
检测到吗?
最佳答案
LeakSanitizer 设计时使用简单的算法进行泄漏检测。每当对已分配 block 的引用恰好位于堆栈、寄存器或事件堆 block 上的某个位置时,LSan 就会认为它是“可访问的”,因此不会报告泄漏。这使得它对编译器版本、优化选项(即变量是否溢出到堆栈)等非常敏感。我强烈怀疑您遇到了此限制。
关于c - 使用 asan 和 strsep() 未检测到的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285757/
我编写了一个简单的 c++ 程序,它使用 new 函数而不使用 delete 函数,然后我使用 asan,但它不报告。 #include #include using namespace std;
当您加载 lib asan 时,它会失败并显示以下错误: 影子内存范围与现有内存映射交错。 ASan 无法正确进行。中止。 我使用 LD_PRELOAD 加载了库,然后启动过程失败,因为上面提到的错误
我使用 GCC 10 标志构建 -fsanitize=address并且可以很好地运行程序,但是如果我在 Valgrind 下运行它,它会显示 Asan 错误: ==477229== Memcheck
在 previous question ,发现使用最新版本的 GNU libstdc++ 从 a space-separated human-readable file 读取一系列数字( mirror
我希望 address sanitizer 在捕获到某些东西时中止。我认为它被设计为默认执行此操作,但它似乎对我不起作用。我还尝试了 ASAN_OPTIONS=halt_on_error=1 但没有效
在工具比较的背景下,如果 ASan 能够检测到以下程序中的问题,我不想对它不公平: $ cat t.c #include int *G; int f(void) { int l = 1; i
目前,当我运行我的应用程序时,我得到下一个输出: /usr/include/c++/4.8/debug/vector:346:error: attempt to subscript container
我无法弄清楚为什么 ASAN 会给出这个输出,为什么我看不到错误在我的代码中的位置和行中,这个错误是在我的代码中,还是在某些库中被程序使用?这就是我构建项目的方式: CC=clang CXX=clan
我正在尝试在启用 ASAN 的情况下运行我的应用程序以搜索泄漏和其他错误,但是,由于我在应用程序内部使用 popen,sanitizer 似乎也报告了子进程错误(我真的不关心)并且令人困惑)。 有没有
我使用 -fsanitize=address 编译了我的代码,但出现了这个错误: ==53702==ERROR: AddressSanitizer: new-delete-type-mismatch
我想用 -fsanitize=address,undefined 运行我的单元测试套件并将所有 sanitizer 错误写入 report.txt文件。默认情况下,所有 sanitizer 错误都会写
目标我想定义几个目标: make msan:使用带有内存清理器的 clang 编译代码 make tsan:使用 clang 和 thread sanitizer 编译代码 make : 使用 gcc
如果我编译一个简单的程序(sample.cpp): #include int main() { printf("Hello, World"); return 0; } 使用共享 saniti
GCC 8.2.0 未检测到使用 -fsanitize=address 编译的以下代码中的泄漏: #include #include #include int main() {
我正在尝试调试我的 OpenCL 内核。我认为,错误是错误的内存分配。所以,我正在寻找一种方法来检测它。 长话短说,我可以在 POCL 平台上运行 OpenCL 内核并使用知名仪器对其进行检查吗? 最
我正在开发一个项目,该项目有一个“util”库,其中包含日志记录、断言处理等内容。它被编译成一个带有 -fPIC 的静态库。添加。我还有一个插件系统,插件是在运行时通过dlopen加载的共享库。 .这
Rust 被称为内存安全语言,但 GCC 中有一个名为 AddressSanitizer 的安全功能(阿桑): ./configure CFLAGS="-fsanitize=address -g" C
我正在尝试将 ASAN(Google 的/Clang 的地址清理)添加到我们的项目中,但遇到了这个问题。 例如,我们有这个简单的C++代码 #include int main() { std
这是悬空指针|引用示例: #include #include #include std::string foo() { return "test"; } int main() {
当使用 -fsanitize=address 构建时,我有时会看到来自 libc++ 类的错误内存访问问题。 这些错误在每次运行中似乎都不会重复,有时甚至根本不会发生。 发生了什么事?我怎样才能避免这
我是一名优秀的程序员,十分优秀!