释放用作 %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
指令,可用于清理,在丢弃这些指针时释放它们。
有几个很好的问题解决了 Bison %union
(特别是 Include struct in the %union def with Bison/Yacc)中结构的使用,但我认为他们没有具体说明,如果 struct
带有指针被定义,然后使用那些指针(所以我必须为它们分配一些内存),谁负责 free(void *)
它们。
在这种情况下我是否负责释放指针?
如果发生内存错误,我该如何调试?
您需要在使用完指针后释放它们。这意味着在使用这些指针运行 reduce 的操作中,您需要在该操作中执行此操作(除非您将指针复制到其他地方 'own' 它们)。
棘手的部分是处理错误恢复——语法错误后,野牛将弹出并丢弃项目以尝试恢复。幸运的是,bison 提供了 %destructor
指令,可用于清理,在丢弃这些指针时释放它们。