код:
delete [] matrix;
delete [] matrix[0];
явно неверно, так как вы используете матрицу после ее удаления.
delete [] matrix[0];
delete [] matrix;
правильно, но я не могу подтвердить, что код в целом делает что-то разумное.
Обратите внимание, что вы не должны удалять matrix [1] и matrix [2], так как они являются просто копиями матрицы [0]. Практическое правило заключается в том, что вы должны иметь такое же количество звонков, которое хотите удалить, так же, как и звонки на новые.