Использование этого распределения:
Node **array1 = new Node*[n];
Содержания array1 является неопределенной. Каждый элемент является Node*
, и поскольку память не инициализирована, значение может быть любым.
Выделение массива указателей не построить объекты заостренного класса.
Так что любые указатели, которые вы помещаете в массив, объекты, которые они указывают, должны быть сконструированы и разрушены в другом месте.
Так, чтобы ответить на ваш вопрос, правильный способ удаления array1 является
delete[] array1;
Однако, обратите внимание, что это не результата в деструкторах вызываются для каждого Node*
- вы должны иметь дело с тем, что вы положили в массив до вы удаляете массив.
EDIT: Я был смущен оригинальным вопрос, который упоминается «изменить значение» в массиве, как будто не было допустимого значения в массиве, как выделено в вашем примере.
BUT ... теперь, когда я понимаю, что вы хотите позже отслеживать указатели на удаление, возможно, вы можете просто создать другой массив для этой цели, где каждый указатель существует только один раз. Таким образом, у вас есть массив, который вы сейчас используете выше, который содержит указатели на узлы, которые могут быть повторены, в какой бы цели вы его ни использовали. Затем у вас есть другой массив для экспресс-цели управления удалением, где каждый указатель происходит только один раз. Должно быть достаточно легко установить что-то вроде nodeCleanupArray[i] = pNewNode
сразу после pNewNode = new Node()
, после чего вы можете взорвать этот массив в линейном времени и delete
каждого элемента. (Это означает, что вы не потрудились бы проверять элементы в массиве 1, вы бы полагались на nodeCleanupArray для очистки)
Являются ли указатели в массиве выделены на кучу? Если это так, вы можете добавить счетчик ссылок к узлу или, возможно, иметь другой массив, который содержит только уникальные указатели на выделенные узлы. – Pete
Почему этот помеченный C++? если вы используете C++, просто используйте для этого векторы. – none
Вы хотите изменить значение 'array1' или указатели внутри него? Вы не показываете, как создается содержимое 'array1' в коде. –