Lex解析器:(缓冲区结束或NUL)段错误

时间:2011-08-15 01:39:38

标签: c++ parsing bison lex flex-lexer

我遇到了编写lex解析器的分段错误问题。因此我在构建程序时添加了调试开关-d到Makefile。 这是我得到的输出。

--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:1324的yy_get_next_buffer(),这是从我的手动编码的lex文件自动生成的C文件。我该如何解决这个问题? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

(我将此标记为"不可重复",however it timed-out/aged awayIt has been answered in the comments。)

@LokiAstari写道:

  

错误不太可能在lex代码中。因此,听起来你正在写一个缓冲区的末尾或以其他方式错误地滥用内存。 Valgrind可能有助于发现内存错误

@AK写道:

  

尝试在最后一个tokenstring之后添加换行符。可能是您的解析器尝试在最后一个符号后面找到一些终止字符。

@ChrisDodd写道:

  

你可能以某种方式损坏了flex的内部缓冲区指针,方法是写下数组的末尾或其他类似内容。如果查看崩溃的lex代码,您可能会在数据结构上放置一个数据断点,该数据断点具有不正确的数据并找出谁正在修改它