- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这是悬空指针|引用示例:
#include <string>
#include <string_view>
#include <iostream>
std::string foo() {
return "test";
}
int main() {
std::string_view bar = foo(); // bar is pointed to destructed string
std::cout << bar << std::endl;
}
地址清理程序无法捕获它,至少使用默认选项。是否可以使用地址清理程序捕获此类错误?
更新。
报告了这个错误:
最佳答案
我的猜测(你没有提供编译器版本)是 operator <<
是在外部实现的,因此 Asan 无法对其进行清理和检测错误(除非您使用 Asan 重建 libstdc++)。这是我使用 GCC 6.2 得到的结果(我稍微修改了 repro,因为我无法访问 c++1z
):
call operator delete(void*)
.L17:
movq %rbx, %rsi
movl std::cout, %edi
call std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
call std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
关于c++ - 临时字符串上的 std::string_view - 由 ASan 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47261061/
我编写了一个简单的 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++ 类的错误内存访问问题。 这些错误在每次运行中似乎都不会重复,有时甚至根本不会发生。 发生了什么事?我怎样才能避免这
我是一名优秀的程序员,十分优秀!