Se allochi memoria con new[] devi liberarla con delete[] e non con delete altrimenti il comportamento è indefinito.
Comunque ti consiglio di non mischiare C e C++ a casaccio e in particolare di non usare stringhe C like (i char* per capirsi) se puoi sostituirle con std::string.

Ad esempio non capisco il senso di avere un campo char* TABELLA.nome quando basta utilizzare un std::string TABELLA.nome per risparmiarsi un'allocazione di memoria (che poi liberi con una semplice delete e non con delete[])