这是代码:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
string str = "hello_2019";
regex pattern[2];
memset(pattern, 0, sizeof(regex) * 2);
pattern[0] = regex(".*_\\d+");
pattern[1] = regex("[a-z]+_.*");
for (int i = 0; i < 2; i++)
cout << regex_match(str, pattern[i]) << endl;
return 1;
}
但是OSX中的相同代码无法运行:
即使使用g ++可以对其进行编译,也会导致运行时错误。
g++ main.cpp
./a.out
1 11669分段错误./a.out
答案 0 :(得分:3)
此行:
memset(pattern, 0, sizeof(regex) * 2);
损坏regex
数组中的每个pattern
对象。
请勿使用memset
初始化非POD对象,例如regex
。在此处使用memset
会导致未定义的行为。
最简单的解决方案是只删除该行。数组本身会自动默认初始化regex
条目,因此无需(错误地)尝试对regex
对象进行“零初始化”。