Weitere meiner vorherigen Frage:Regular Expression verursacht Stapelüberlauf
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();
}
}
Es ist jedoch mit dieser Datei Ergebnisse in einem Stapelüberlauf Laden: ECMAScript Regex for a multilined string, habe ich die folgenden Ladevorgang implementiert (Parameter: 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 ===
ich war nicht in der Lage, die Quelle des Stack-Überlauf zu finden, aber es sieht aus wie die äußere std::sregex_iterator
Schleife verantwortlich ist.
Vielen Dank im Voraus!
Compiler und Betriebssystem? –
Compiler: MSVC 2012 Update 3, Betriebssystem: Windows 7 x64 –
Einige ähnliche Fragen: http://stackoverflow.com/questions/15696435/c-11-regex-stack-overflow-vs2012 und http://stackoverflow.com/ Fragen/12828079/why-does-stdregex-iterator-Ursache-ein-Stack-Überlauf-mit-dieser-Daten –