Ответ на задачу: проблема находится в строке delete [] data;. А именно в указателе на void (потере настоящего типа). Дело в том, что с точки зрения стандарта С++ такое удаление массива является неопределённым поведением.