Доброго времени суток!
В общем, решил я в грамматике своего интерпретатора почистить память, ибо очень не хорошо на каждом шаге ее выделять и не чистить, пусть даже при работе со строчками.
Файлы проекта вот тут.
Проблема такова:
если в syntax.ypp раскомментировать 234 строку и в 185 добавить delete tmp;
, то интерпретатор начинает сыпаться, например, на таком коде (для отладки грамматики пока просто интерпретатор собирает команды в списки и потом выводит их):
> ty && kl
ty && kl
> hj && io ||
| jk &&
| kll
io && io || jk && kll
Последняя строчка должна быть такой: hj && io || jk && kll
Или вот так вот сыпется (добавлено отладочное сообщение о вызове деструктора списка):
> ty && io || kl
ty && io || kl
destructor 0 ty
destructor 1 io
destructor 2 kl
destructor 1 io
destructor 0 ty
> ty && hj &&
destructor 1 hj
| jk
Ошибка сегментирования (сделан дамп памяти)
То есть почему-то при трех аргументах в первом конвейере, вызывается деструктор одного из элементов во втором конвейере.
Второй день в глаза долблюсь - не вижу причин такой странной работы new/delete в bison. Как мне корректно почистить память?