C ++ 11 Regex-Stack-Überlauf / VS2012

8

Ich bin dabei, älteren Boost-Regex-Code in C ++ 11 umzuwandeln, und ich stolperte über ein Problem mit einem meiner Testfälle. Hier ist ein Szenario, das eine Stapelüberlauf-Ausnahme mit std :: regex verursacht, aber mit boost :: regex funktioniert. Ich habe das Muster für reguläre Ausdrücke nicht geändert und habe überprüft, dass das Muster das ist, was ich möchte. Es scheint, dass dieses bestimmte String-Eingabe-Fragment den Stapelüberlauf verursacht. Mit VS2012, x64 Debug Build:

%Vor%

Betrachtet man den Call-Stack nach der Exception, scheint in der Regex-Implementierung eine Art unendlicher Rekursion stattzufinden. Ich habe derzeit keinen GCC, um das zu testen. Was mache ich falsch?

Aktualisierung: Nach den folgenden Vorschlägen habe ich diesen Code in eine Konsolen-App eingefügt, VS 2012 x64 Debug und ich bekomme den Stack-Überlauf. Wenn ich es in x64 Release oder Win32 Debug oder Release ändern, läuft es gut. Huh ??? Muss ich VS und / oder das Plattform SDK neu installieren? Ich bin auf Win7 x64.

Aktualisierung # 2: Etwas verwandter Beitrag: Warum verursacht std :: regex_iterator einen Stapelüberlauf mit diesen Daten? Ich nehme an, wenn ich meine Regex umschreibe, könnte es helfen. Ich bin mir immer noch nicht sicher, warum die Bissigkeit wichtig ist. Und warum funktioniert es für andere, aber nicht für mich auf meinem System. Seufz.

    
Tom 29.03.2013, 02:27
quelle

1 Antwort

1

Ich habe das mit x64 Debug Build reproduziert, und ich glaube, das ist ein echter Stack-Überlauf .

Wenn Sie Ihre Stapelgröße auf 10 MB oder so ändern (linker Befehlszeilenoption /STACK:"10000000" ), Es wird gut funktionieren.

    
t-mat 02.04.2013 04:26
quelle