我遇到了编写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文件。我该如何解决这个问题? 提前谢谢。
答案 0 :(得分:0)
(我将此标记为"不可重复",however it timed-out/aged away。It has been answered in the comments。)
@LokiAstari写道:
错误不太可能在lex代码中。因此,听起来你正在写一个缓冲区的末尾或以其他方式错误地滥用内存。 Valgrind可能有助于发现内存错误
@AK写道:
尝试在最后一个tokenstring之后添加换行符。可能是您的解析器尝试在最后一个符号后面找到一些终止字符。
@ChrisDodd写道:
你可能以某种方式损坏了flex的内部缓冲区指针,方法是写下数组的末尾或其他类似内容。如果查看崩溃的lex代码,您可能会在数据结构上放置一个数据断点,该数据断点具有不正确的数据并找出谁正在修改它