我想下面的程序應該抱怨它不能編譯正則表達式,或者把它當作合法的並且編譯它很好(我沒有標準,所以我可以'不要說這個表達是嚴格合法的,當然可以有合理的解釋)。不管怎麼說,有g++ (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
情況是,在運行時,它在圖書館的膽量崩潰硬g ++正則表達式碰撞(可能是非句法)表達式
*** Error in `./a.out': free(): invalid next size (fast): 0x08b51248 ***
。
問題是:
a)它的錯誤,對吧?我假設(也許不正確)標準沒有說std :: regex可能崩潰,如果它不喜歡的語法。 (msvc吃得很好,fwiw)
b)如果它是一個bug,是否有一些簡單的方法來查看它是否已被報告(我第一次探討gnu-land bug系統是否嚇人)?
#include <iostream>
#include <regex>
int main(void)
{
const char* Pattern = "^(%%)|";
std::regex Machine;
try {
Machine = Pattern;
}
catch(std::regex_error e)
{
std::cerr << "regex could not compile pattern: "
<< Pattern << "\n"
<< e.what() << std::endl;
throw;
}
return 0;
}
我會說你在正則表達式解析器中有一個錯誤,因爲它應該做的是匹配任何東西。管道字符指示正則表達式解析器匹配其任一側的表達式。因爲在你的情況下,右側是空的,它應該匹配任何東西。我想你會匹配管道字符,因此應該逃避它,它應該工作。 – ClasG
順便說一句,這是正則表達式只是一個測試,或者你想要做什麼? – ClasG
''在gcc-4.8.1的libstdC++中不起作用。如果您可以使用LLVM的libC++,請使用[您的程序運行](http://coliru.stacked-crooked.com/a/e061305dca0676ba)。否則 - boost.regex –
Cubbi