![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]()
Здравствуйте. В теле цикла создается динамическая строка
Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,068
|
![]()
Имеется ввиду, что после delete указатель a продолжает указывать на строку abc?
delete физически ничего не удаляет, просто область памяти помечается как свободная и при необходимости будет использована для следующих вызовов new, после чего старое значение "затрется" новыми данными. Или после new в a записан мусор? Лучше после выделения памяти инициализировать данные. Для объектов классов вызывается конструктор, а вот для "обычных" типов никакой очистки и инициализации не происходит. Если написать int a, то в а будет записан ноль. Если же int *a = new int; то будет мусор. В любом случае все переменные лучше инициализировать перед использованием. Последний раз редактировалось pu4koff; 22.03.2009 в 16:39. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]()
Нет, после delete а не указывает на abc. Но после new старое значение остается, и если присвоить a строку "d", то будет не "d", а "dbc".
|
![]() |
![]() |
![]() |
#4 |
Тупой студент
Форумчанин
Регистрация: 12.05.2007
Сообщений: 614
|
![]()
полный код приводи. а то после твоего "присвоить" кажется, что ты именно присваиваешь, а не копируешь функцией strcpy
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]()
Вот код:
Код:
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 14.03.2009
Сообщений: 41
|
![]()
потому что указатель указывает на 1ый байт выделенной памяти
|
![]() |
![]() |
![]() |
#7 |
Maniac
Форумчанин
Регистрация: 03.01.2009
Сообщений: 450
|
![]()
Вот здесь я не согласен, к примеру такой код
Код:
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,068
|
![]()
Согласен. Для локальных переменных это не работает. Просто всегда инициализирую перед использованием, вот и подзабыл эти нюансы
![]() Ну это только если в дальнейшем планируется использовать эту переменную. И лучше не 0, а макрос NULL. Суть одна, но всеже NULL нагляднее. Если не написать p = NULL, то просто потом никак не определишь: указатель у нас "рабочий" или нет. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]() |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 14.03.2009
Сообщений: 41
|
![]() Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
динамическая строка в консоле win32 | AlexeyLed | Общие вопросы C/C++ | 4 | 10.03.2009 12:39 |
Строка состаяния или загрузачная строка | Sergeu | Мультимедиа в Delphi | 8 | 27.08.2008 10:32 |
Динамическая переменная | kezman | Общие вопросы C/C++ | 1 | 29.07.2008 13:49 |
Класс Динамическая строка по Си | Zolotce | Помощь студентам | 1 | 26.04.2008 18:58 |
Динамическая память | MadDog__ | Помощь студентам | 2 | 22.11.2007 00:05 |