Originariamente inviato da Acciues

Ho letto su vari forum che bisognerebbe allocare la memoria tramite funzioni malloc, callog e cose varie...
Falso. In C++ si usano new e delete per la gestione della memoria.

A me sembra strano quel catch. In genere il paramento è un reference non una copia.

catch (list<ParserError>& errors)

Però come dice PeppePes88 il problema è sicuramente un puntatore su cui si fa una doppia delete.