Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление указателей. Хм..Второй день не сплю.. 
:(
    Опции темы
Coocky
Дата 18.7.2005, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Ну учился как все, если есть new значит и делит..
Но часто встречал такой вариант

Код

CWnd *p=GetDlgItem(MY_ITEM);
///
.....
////Че-то делаем
.....
if (p!=NULL)


{
 delete p;

}



ну и..
что скажете...?
Память не выделяли,а указатель удаляем. вообще, правильно , вернее нужно ли так?
Пардон, что на МФС, но надеюсь всем понятно.. smile

Это сообщение отредактировал(а) Coocky - 18.7.2005, 22:03


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Вообще говорят что им лучше не пользоваться smile

http://www.flounder.com/getdlgitem.htm




--------------------

PM   Вверх
Coocky
Дата 18.7.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Domestic Cat
Привет старина, вот уж кого не ожидал увидеть.. smile
Недаром я подозревал smile
Так сылочка у меня молчит...
И чем лучше не пользоваться..?

Это сообщение отредактировал(а) Coocky - 18.7.2005, 22:10


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Там про GetDlgItem smile Но ссылка работает, проверил только что.


--------------------

PM   Вверх
Coocky
Дата 18.7.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



А все , работает.
Но я не за GetDlgItem() smile
Код

CHttpFile* pFile=(CHttpFile*)OpenURL(......);

///Че-то опять пишем, возможно даже и работает :) 

if (pFile!=NULL)


{
 delete pFile;

}



Можно и так , суть не в этом...
Почему иногда удаляют( иногда я вижу)
указатели на которые не выделялась память..?

Это сообщение отредактировал(а) Coocky - 18.7.2005, 22:15


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Погоди, но ведь метод OpenURL возвращает указатель, а указатель может быть только на область памяти. Следовательно, память все-таки была выделена.


--------------------

PM   Вверх
Coocky
Дата 18.7.2005, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Domestic Cat
Ладно, smile
Ну а другие методы..
Код



int s=10;

int *p=& s;
 


тут надо удалять? smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Удалять нужно только то, что создано через new, то есть на хипе. А в твоем примере переменная существует на стеке, потому память будет освобождена автоматически по завершению метода.


--------------------

PM   Вверх
Coocky
Дата 18.7.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Domestic Cat
Правильно, но тогда...
Указатель же можно вернуть таким же образом?
Код

int * MyFunc (....)

{
int s=10;
int *p=&s;
return p;


}


Просто вопрос в другом, я то же всегда( как выше описано) удалял при явном выделении памяти..
Но в книгах иногда видел и удаление и неудаление без явного выделения памяти..
Мне -то что делать?
Как жить? smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Цитата(Coocky @ 18.7.2005, 13:41)
int * MyFunc (....)
{
int s=10;
int *p=&s;
return p;

Насколько я помню, ничего хорошего при этом не выйдет smile

Цитата(Coocky @ 18.7.2005, 13:41)
Мне -то что делать?
Как жить? smile

Так, чтобы не было мучительно больно за бесцельно прожитую жизнь (с) smile


--------------------

PM   Вверх
Coocky
Дата 18.7.2005, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Domestic Cat
Не я серьезно, про утечку памяти, ну не должно ж быть?
Откуда я знаю, что там Мелкие внутри своих функций делают..
Просто говорю, что видел один код, в разным вариантом, кто удаляет, кто нет....


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Удаляй, хуже не будет...


--------------------

PM   Вверх
Coocky
Дата 18.7.2005, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Domestic Cat
А иногда и в дебаг вылетаю....
Не могу понять когда да ,и когда нет.
Если это нужно делать, то буду(хотя мароки будет.........) у нас же все через указатели..
Добавлено @ 22:53
Классический код С++ я учил давно, но не помню про delete без выделения памяти..


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Domestic Cat
Дата 18.7.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: нет
Всего: 172



Все что говорим мсдн:
Цитата
The delete operator deallocates a block of memory. The pointer argument must refer to a block of memory previously allocated for an object created with the new operator.


Если тебе возвращают указатель, значит память была выделена на хипе по-любому, значит нужно удалять.



--------------------

PM   Вверх
Любитель
Дата 18.7.2005, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Цитата(Domestic @ 18.7.2005, 22:54)
Если тебе возвращают указатель, значит память была выделена на хипе по-любому, значит нужно удалять.

Может быть и не выделена, может использовались скажем параметры, преданные функции. А так надо удалять если знаешь, что возвращается указатель на память, выделенную внутри функции.


--------------------
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.