简单的C ++正则表达式在OSX中出现运行时错误,但Windows

时间:2018-12-26 03:30:50

标签: c++ regex macos

这是代码:

#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;
}

enter image description here

但是OSX中的相同代码无法运行:

enter image description here

即使使用g ++可以对其进行编译,也会导致运行时错误。

g++ main.cpp
./a.out
  

1 11669分段错误./a.out

1 个答案:

答案 0 :(得分:3)

此行:

memset(pattern, 0, sizeof(regex) * 2);

损坏regex数组中的每个pattern对象。

请勿使用memset初始化非POD对象,例如regex。在此处使用memset会导致未定义的行为

最简单的解决方案是只删除该行。数组本身会自动默认初始化regex条目,因此无需(错误地)尝试对regex对象进行“零初始化”。