Точный ответ на вопрос дать не могу поскольку код представлен не полностью. Вероятнее всего data в классе объявлена не верно, она должна быть указателем на массив и никак иначе, pointersaver в коде ниже тоже должен быть указателем на массив, хотя бы преобразовываться к этому типу (с помощью
static_cast) в месте вызова delete.
Вообще при использовании C
++ настоятельно рекомендуется использовать
ссылки, умные указатели
unique_ptr, и готовые конструкции для типов, подойдёт
array.
Если же целью ставится разобраться в "сырых" указателях и работе с ними, то стоило бы вместо цикла
for (int i = deg; i >= 0; i--) data[i] = 0;
использовать
memset.
Однако повторюсь, в общем случае гораздо лучше написать высокоуровневый код использую стандартную библиотеку и не лазая в дебри прямого доступа к памяти и других низкоуровневых конструкций.
P.S. в Release код сильно изменяется компилятором в процессе оптимизации и из-за большего количества "знаний о коде" компилятор может сгенерировать его гораздо чище чем он был написан, а в Debug оптимизации не применяются и поэтому код будет работать так как написан.
Доп: а вообще вот нашёл хорошую статью по теме
https://habrahabr.ru/company/abbyy/blog/117208/ там рассказано как new[] delete[] работает на примерах с ошибками.