- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行 ASAN 以在一个非常大的项目中查找内存泄漏。我找到了原因,但不知道如何解决。我制作了一个示例程序来使问题易于理解。
在下面的程序中,我只能解决指定的代码。对于其余的代码,无法解决。
因此,请建议我可能必须解决以下 ASAN 错误的解决方法。
(如何使用 t1 使指针 2 为 NULL?)
#include<stdio.h>
#include<stdlib.h>
typedef struct l
{
int a, b;
}pack;
void delete_me(pack *ap)
{
free(ap);
}
int main(void)
{
pack **d_ptr = (pack **)malloc(3 * sizeof(pack *));
pack *one, *two, *three;
one = (pack *)malloc(sizeof(pack));
one->a = 1, one->b = 2;
two = (pack *)malloc(sizeof(pack));
two->a = 3, two->b = 4;
three = (pack *)malloc(sizeof(pack));
three->a = 5, three->b = 6;
d_ptr[0] = one;
d_ptr[1] = two;
d_ptr[2] = three;
// I can Only work-around below code (4 lines)
pack *t1 = d_ptr[1]; // For which index t1 would be assigned, is not known before hand
t1->a = 1; t1->b = 2;
printf("a: %d, b: %d\n", two->a, two->b);
delete_me(t1); // How to delete t1 so that corresponding pointer also becomes NULL?
// Work around only till here was possible.
// Below this, No workaround possible.
if (two && (two->a == one->a)) // ASAN ERROR
printf("ERROR\n");
else
printf("It works!\n");
return 0;
}
最佳答案
不幸的是,您的问题并不能真正解决。
当您有同一个指针的多个副本时,例如
int *p1 = malloc(sizeof (int));
int *p2 = p1;
int *p3 = p2;
free(p2);
// Now p1, p2, p3 have invalid values.
// The C standard calls these "indeterminate values"; accessing them has undefined behavior
p2
至
NULL
释放后,但仍然留下
p1
和
p3
悬空。您无法自动找到可能存在于程序内存中任何位置的指针值的所有副本。
关于c - 免费后使用ASAN堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53558983/
我编写了一个简单的 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++ 类的错误内存访问问题。 这些错误在每次运行中似乎都不会重复,有时甚至根本不会发生。 发生了什么事?我怎样才能避免这
我是一名优秀的程序员,十分优秀!