释放用作 %union 模型的 struct 中的指针

Freeing pointers in `struct` used as model for `%union`

有几个很好的问题解决了 Bison %union(特别是 Include struct in the %union def with Bison/Yacc)中结构的使用,但我认为他们没有具体说明,如果 struct 带有指针被定义,然后使用那些指针(所以我必须为它们分配一些内存),谁负责 free(void *) 它们。

在这种情况下我是否负责释放指针?

如果发生内存错误,我该如何调试?

您需要在使用完指针后释放它们。这意味着在使用这些指针运行 reduce 的操作中,您需要在该操作中执行此操作(除非您将指针复制到其他地方 'own' 它们)。

棘手的部分是处理错误恢复——语法错误后,野牛将弹出并丢弃项目以尝试恢复。幸运的是,bison 提供了 %destructor 指令,可用于清理,在丢弃这些指针时释放它们。