lexパーサーが記述されたセグメンテーション障害の問題が発生しました。したがって、プログラムをビルドするときにデバッグスイッチ-dをMakefileに追加しました。 これは私がそれから得る出力です。自動的に私のハンドコードlexのファイルから生成されたCファイルである1324:私は、デバッグツールを介してこれを実行すると Lexパーサー:(バッファの終わりまたはNUL)segfault
--accepting rule at line 180 ("bxz")
--accepting rule at line 61 (" ")
--accepting rule at line 180 ("e")
--accepting rule at line 68 ("
")
--accepting rule at line 180 ("0L")
--accepting rule at line 193 ("!")
--accepting rule at line 68 ("
")
--accepting rule at line 180 ("0x")
--accepting rule at line 193 (""")
--accepting rule at line 68 ("
")
--(end of buffer or a NUL)
Segmentation fault
は、私はエラーがlex.yy.cをでyy_get_next_buffer()で発生することがわかりました。この問題を解決するにはどうすればよいですか? ありがとうございます。
バグがlexコード。したがって、バッファの終わりを書き留めたり、メモリを誤って乱用したりしているように見えます。 Valgrindはメモリエラーの発見に役立ちます。 –
最後のトークンストリングの後に改行を入れてください。あなたのパーサーは、最後の記号の後にいくつかの終了文字を見つけようとしているかもしれません。 –
おそらく、配列の末尾などを書き去って、Flexの内部バッファポインタを何らかの形で破損している可能性があります。クラッシュするレックスコードを見ると、不正なデータを持つデータ構造にデータブレークポイントを設定し、誰がそれを変更しているのかを把握できる場合があります –