#include <iostream>
#include <set>
#include <iterator>
using std::cout, std::endl;
using std::multiset;
int main() {
multiset<int> m;
m.insert(1);
m.insert(2);
m.insert(3);
m.erase(std::prev(m.end()));
for (auto &i : m) {
cout << i << ' ';
}
cout << endl;
}
当我使用
g++ -o main main.cpp
编译此代码时,它可以正常工作。但是,当我使用 g++ -fsanitize=address -fsanitize=undefined -fno-sanitize-recover -fstack-protector -o main main.cpp
编译此代码时,大约 10 次运行中有 1 次会弹出 AddressSanitizer:DEADLYSIGNAL
。
我正在使用
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc.
代码改编自https://stackoverflow.com/a/19468959/19357263
这是编译器的错误吗?
AddressSanitizer:DEADLYSIGNAL
。当您运行地址清理程序时,禁用 ASLR 应该可以解决问题:
echo 0 > /proc/sys/kernel/randomize_va_space
完成后,不要忘记重新启用 ASLR 并恢复保护:
echo 2 > /proc/sys/kernel/randomize_va_space