Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2008, 10:18   #11
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

вы тогда мне дураку объясните почему вот это у меня работает:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := TFileStream.Create('C:\test.doc', fmcreate);
  fstream.Free;
  fstream := nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if assigned(fstream)
    then fstream.Free;
end;
при дестрое же у нас потока не существует, но ошибок никаких не выдается, а по вашей логике должен быть экзепшн. только если не написать после Free присваивание nil, то естественно будет ошибка. кстати может в этом косяк еще где у автора.
pu4koff вне форума Ответить с цитированием
Старый 07.03.2008, 10:28   #12
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну используйте FreeAndNil(TObject) и все будет пучком...
BOBAH13 вне форума Ответить с цитированием
Старый 07.03.2008, 10:30   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

мне в этом FreeAndNil не нравица реализация. нафик там переменная дополнительная вводица я так и не понял) )
pu4koff вне форума Ответить с цитированием
Старый 07.03.2008, 10:49   #14
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
вы тогда мне дураку объясните почему вот это у меня работает:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := TFileStream.Create('C:\test.doc', fmcreate);
  fstream.Free;
  fstream := nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if assigned(fstream)
    then fstream.Free;
end;
при дестрое же у нас потока не существует, но ошибок никаких не выдается, а по вашей логике должен быть экзепшн. только если не написать после Free присваивание nil, то естественно будет ошибка. кстати может в этом косяк еще где у автора.
Когда мы отдаем поток на передачу
объект уже нам не принадлежит, и будет уничтожен после передачи.
Поэтому можно сразу присвоить nil и ошибки не будет:

Код:
 sendStream( ...
 FStream := nil
sendStream освобождает поток и получается, что наша ссылка FStream указывает на несуществующий объект (sendStream не может сделать FStream := nil)
alexBlack вне форума Ответить с цитированием
Старый 08.03.2008, 16:25   #15
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Спасибо, теперь всё понятно. Ещё я думал что Assigned проверяет существование объекта. Из справки понял, что функция проверяет лишь наличие указателя, но не проверяет на что он указывает. Собственно вроде теперь всё на своих местах
eks-s вне форума Ответить с цитированием
Старый 08.03.2008, 20:26   #16
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Когда мы отдаем поток на передачу
объект уже нам не принадлежит, и будет уничтожен после передачи.
Ключевая фраза.
Можно сколько угодно использовать приведенный автором код, но без
собственно обмена данными - все будет в порядке. (см. пример от pu4koff)
А вот alexBlack совершенно четко обрисовал ошибку...
(Прошу прощения, может и флуд, не удержался)

Последний раз редактировалось mihali4; 08.03.2008 в 20:40.
mihali4 вне форума Ответить с цитированием
Старый 10.03.2008, 13:43   #17
andrey4623
Форумчанин
 
Аватар для andrey4623
 
Регистрация: 31.05.2007
Сообщений: 266
По умолчанию

Пробуйте через try...except...end
andrey4623 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мой плеер. Возникает ошибка Fellics{новичок} Помощь студентам 8 26.06.2008 20:11
Возникает проблема с решением задачи. profi Помощь студентам 2 30.11.2007 01:11
Возникает ошибка Invalid floating point operation Иринкаа Помощь студентам 3 29.11.2007 22:10
Помогите с получением TStream в CGI boades Работа с сетью в Delphi 0 25.10.2007 10:25
Возникает исключение "Access violation at address ... Наташка Общие вопросы Delphi 1 18.05.2007 12:16