在一个业余爱好项目中,我使用地址清理程序 (-fsanitize=address) 和 g++-6 (Homebrew GCC 6.3.0_1) 6.3.0。
我收到一个我不明白的错误,它是:
==94266==AddressSanitizer CHECK failed: ../../../../libsanitizer/asan/asan_globals.cc:146 "((AddrIsAlignedByGranularity(g->size_with_redzone))) != (0)" (0x0, 0x0)
#0 0x10b60cd3d in __asan::AsanCheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (libasan.3.dylib+0x5dd3d)
#1 0x10b612be3 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (libasan.3.dylib+0x63be3)
玩了一段时间后,我注意到我在两个不同的类中使用正则表达式,如果删除其中任何一个,问题就会消失。我想了解为什么会这样以及我能做些什么。
因此,我的下一个尝试是构建问题的最小示例,我提出了以下建议:
// a.cpp
#include <iostream>
#include <regex>
#include <string>
using namespace std;
void a(const std::string &s)
{
regex re_a("foo (.+)");
smatch pieces;
if (regex_match(s, pieces, re_a))
{
cout << "foo with …Run Code Online (Sandbox Code Playgroud)