Ваш ответ уже был дан ответ несколько раз, но я думаю, что все ответы отсутствуют один важный бит (который вы не запрашивали в явном виде): Пока вы выделили память на десять символов, а затем перезаписали единственный указатель, который вы ссылаетесь на эту область памяти, вы создали утечку памяти, которую вы не можете исправить anymor е. Чтобы сделать это правильно, вы бы использовали std :: strcpy() память из предварительно выделенной предварительно инициализированной постоянной части памяти, где содержимое вашего литерала строки хранилось в ваших динамически распределенных 10 символах.
И тут приходит важную часть:
Когда вы закончите с решением этих 10 символов, вы DEALLOCATE их с помощью delete[]
. Здесь важны []
. Все, что вы выделяете с помощью new x[]
, должно быть освобождено delete[]
. Ни компилятор, ни среда выполнения не предупреждают вас, когда используют обычный delete
, поэтому важно запомнить это правило.
@GMan: Ну, это действительно C++. Но C-ish C++. Таким образом, плохой C++. Я с Заном. Используйте 'std :: string'. –
sbi
@sbi: Все хорошо. :) Я согласен: отдельное управление ресурсами из использования ресурсов. – GManNickG