2016-08-08 14 views
-1

wenn ich versuche, eine string (cout) in einem flex-programm zu drucken, stürzt das programm ab. Meine .l-Datei sieht wie folgt aus:flex cout string crash

%{ 
    #include <iostream> 
    #include <string> 

    using namespace std; 
%} 

%option noyywrap 

%% 
. {string str = "hi"; cout << str;} 
%% 

int main(){ 
    yylex(); 

    return 0; 
} 

ich die generierten Dateien mit g ++ kompiliert werden. Meine Flex-Version ist 2.5.35.

Wenn ich einfach schreibe, stürzt das Programm nicht ab.

Was mache ich falsch?

+0

und was ist Ihre 'g ++' Version? Ich kann das Problem nicht reproduzieren 'flex 2.5.35' und' g ++ 4.9.2' –

+0

meine g ++ Version ist 4.9.3 –

+0

Gibt es Absturzprotokolle? – theFunkyEngineer

Antwort

0

Es scheint mit Flex-Version 2.5.39 zu funktionieren.

Sie können Vorprozess die erzeugte Datei mit g ++ -E und Blick auf den Ausgang zu sehen, ob die Übersetzung von

{string str = "hi"; cout << str;} 

nicht geändert hat.

+0

Der Befehl hat sich während der Übersetzung nicht geändert –

+0

Ich habe Ihre generierte Datei heruntergeladen und kompiliert und läuft gut mit g ++ 4.8.4 und clang ++ 3.6. Es gibt so viele "blubhi" aus wie in der Eingabe. Valgrind meldet nur einige Speicherlecks im Zusammenhang mit dem Flex-Puffer. Also ist dein Code für mich in Ordnung. – Franck