Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > delete без new


Автор: CPlusPlusFAN 9.2.2006, 03:34
Здравствуйте!

Понимаю, что мой вопрос может показаться Вам наивным, но всё-таки я рискну:

Пусть имеется указатель

Код


int *i;
/*Какие-то действия над указателем*/



Вопрос: насколько корректно вот это?

Код


delete i;



Причём я не выделял память с помощью new.

Автор: AlexPro 9.2.2006, 05:29
Хороший способ поиметь себе проблемы.

Автор: cardinal 9.2.2006, 05:53
Цитата(CPlusPlusFAN @ 9.2.2006, 01:34 Найти цитируемый пост)

Вопрос: насколько корректно вот это?

Это некорректно, т.к. new и delete это как скобки - сколько открыл, столько и закрыть надо! Остальное как AlexPro уже сказал приводит только к глюкам...

Автор: azesmcar 9.2.2006, 09:59
Во первыx int *i запись неправильна изначально...надо инициализировать указатель...все зависит от того что значит

Цитата

/*Какие-то действия над указателем*/

Цитата

int *i;


пример
Код

int *p = new int;
int *i = p;
//...
delete i;

или
Код

int *i = 0;

delete i;


вполне нормальная запись (по стандарту удалять нулевой указатель нормально)...правда бессмысленная smile
записью int * ты просто создал указатель на тип int, который на самом деле ни на что не указывает...без инициализации указатель не обьявляют (даже warning получишь по этому поводу от компилятора)...а в остальном если ничего не делал new, то что же удалять?

Автор: AlexPro 9.2.2006, 11:05
Цитата(azesmcar @ 9.2.2006, 09:59 Найти цитируемый пост)

Во первыx int *i запись неправильна изначально...надо инициализировать указатель

Необязательно это делать сразу, хотя и желательно. Главное не забыть его инициализировать его перед использованием.

Автор: azesmcar 9.2.2006, 11:16
Цитата

Необязательно это делать сразу, хотя и желательно. Главное не забыть его инициализировать его перед использованием.


Я сказал warning а не error smile
Цитата

без инициализации указатель не обьявляют


В смысле нежелательно smile

Автор: DeadSoul 9.2.2006, 22:39
CPlusPlusFAN,
1. Неициализированный указать - источник проблем на твою пятую точку
2. Такой код корректер:
Код

int *p=0;

delete p;

Такой нет
Код

int *p=(ште*)13612;

delete p;

Автор: AlexPro 10.2.2006, 01:18
Цитата(DeadSoul @ 9.2.2006, 22:39 Найти цитируемый пост)

int *p=(ште*)13612;

Такой код действительно некорректен smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)