В дополнение к моему предыдущему вопросу: ECMAScript Regex for a multilined string я реализовал следующую процедуру загрузки:Регулярное выражение вызывает переполнения стека
void Load(const std::string& szFileName)
{
static const std::regex regexObject("=== ([^=]+) ===\\n((?:.|\\n)*)\\n=== END \\1 ===", std::regex_constants::ECMAScript | std::regex_constants::optimize);
static const std::regex regexData("<([^>]+)>:([^<]*)\\n", std::regex_constants::ECMAScript | std::regex_constants::optimize);
std::ifstream inFile(szFileName);
inFile.exceptions(std::ifstream::badbit);
std::string szFileData((std::istreambuf_iterator<char>(inFile)), (std::istreambuf_iterator<char>()));
inFile.close();
std::vector<std::future<void>> vecFutures;
for(std::sregex_iterator itObject(szFileData.cbegin(), szFileData.cend(), regexObject), end; itObject != end; ++itObject)
{
if((*itObject)[1] == "OBJECT1")
{
vecFutures.emplace_back(std::async([](std::string szDataString) {
for(std::sregex_iterator itData(szDataString.cbegin(), szDataString.cend(), regexData) { // Do Stuff }
}, (*itObject)[2].str()));
}
else if((*itObject)[1] == "OBJECT2")
{
vecFutures.emplace_back(std::async([](std::string szDataString) {
for(std::sregex_iterator itData(szDataString.cbegin(), szDataString.cend(), regexData) { // Do Stuff }
}, (*itObject)[2].str()));
}
}
for(auto& future : vecFutures)
{
future.get();
}
}
Однако, загрузив ее с этим файлом приводит к переполнению стека (параметры: 0x00000001, 0x00332FE4) :
=== OBJECT2 ===
<Name>:Test Manufacturer
<Supplier>:Test Supplier
<Address>:Test Multiline
Contact
Address
<Email>:[email protected]
<Telephone Number>:
=== END OBJECT2 ===
=== OBJECT1 ===
<Number>:1
<Name>:Test
<Location>:Here
<Manufacturer>:
<Model Number>:12345
<Serial Number>:54321
<Owner>:Me
<IP Address>:0.0.0.0
=== END OBJECT1 ===
Я не смог найти источник переполнение стека, но это выглядит как внешний std::sregex_iterator
петля отвечает.
Заранее благодарен!
Компилятор и ОС? –
Компилятор: MSVC 2012 Обновление 3, ОС: Windows 7 x64 –
Некоторые похожие вопросы: http://stackoverflow.com/questions/15696435/c-11-regex-stack-overflow-vs2012 и http://stackoverflow.com/ Вопросы/12828079/why-do-stdregex-iterator-cause-a-stack-overflow-with-this-data –