Titolo cambiato; comunque, in C++ le struct e le class sono esattamente equivalenti (semplicemente nelle class i membri e l'ereditarietà sono private di default). Concordo su new invece di malloc, ma ribadisco che tutte queste istanze allocate sull'heap non mi paiono una buona idea.

Per il resto, usando un while al posto di un if lì il problema è andato a posto?