Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

New()


Страницы:   1 2 3

][ncognito ©   (2004-09-22 00:28:00) 

Ув. господа, подскажите, как узнать был ли над указателем проведена процедура New();


GuAV   (2004-09-25 14:27:00) [21]

GuAV ©   (25.09.04 11:14) [30]

>в чем проявляется вредность совета?

проитирую начало дискуссии:

][ncognito   (22.09.04 00:28)  
Ув. господа, подскажите, как узнать был ли над указателем проведена процедура New();

-----------------------------------------------------------------
Defunct ©   (22.09.04 00:33) [1]
Var P: Pointer = nil;

1. if P <> Nil Then <был создан, не обязательно New>

2. Try
   P^ := ....
 Except
   < не был создан >
 End;


Вредность совета в том, что Вы даёте неверные коментарии к Вашему коду.

> вам напомнить, что ваш совет был просто отрицательным.

он был правильным. если надо, могу продемострирорвать на примере что "никак". "незачем" не стоит писать программы чтоб это было нужно.


> вы не модератор, чтобы решать что  offtop, а что не offtop.

замечание принимается.


Defunct   (2004-09-25 12:02:00) [22]

GuAV ©   (25.09.04 11:14) [30]

см. [27]
>> На фик вредные советы давать...
>А они вредные? Автор споткнется раз, и если в голове не пусто то сам поймет как надо делать.

Вы считаете автору повредит знание:
P<>Nil
Assigned
и Try Except?

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

> Вы Defunct таки действительно развели оффтопик
Разводят обычно 2 вещи - кроликов или личностей легко поддающихся убеждениям.
Я вел дискуссию не с вами, хочу обратить ваше внимание на то, что никого здесь не разводил, и вы не модератор, чтобы решать что  offtop, а что не offtop.


GuAV   (2004-09-25 11:14:00) [23]

Вы Defunct таки действительно развели оффтопик, потому что каждое нестандартное решение требует своего обоснования, про COM порт у нас нет информации, может это и правильно, а по темам вроде этой > На фик вредные советы давать...


Defunct   (2004-09-25 02:19:00) [24]

Германн ©   (25.09.04 01:42) [28]

Конечно, нетрудно сказать "можно" после того как уже был подтвержден факт рабочего решения.

> Многое можно! Но либо вернемся в ДОС, либо напишем драйверы, которые, скорее всего кроме автора, никому не нужны.

Что вы этой фразой хотели показать? Типа нестандартные решения - пустая трата времени и глупость? А знаете ли вы, что в телемеханике пракически все существующие решения - нестандартные, оттого и поставляется ПО с компьютерами впридачу, а не наоборот.

> Прошу прощения за Offtopic!
Same


Германн   (2004-09-25 01:42:00) [25]

2 Defunct ©   (23.09.04 15:11) [27]

>Вот как вы считаете можно сделать синхронную передачу данных по линиям, совсем не предназначенным для передачи данных, например по линии  ACK LPT порта или по линиям CTS/RTS последовательного порта? Думаю 99% здесь присутствующих скажут - нельзя и незачем, а я скажу - можно и целесообразно, так как сам делал и оно работает (COM порт превращается в 3 COM порта).

Можно.
Многое можно! Но либо вернемся в ДОС, либо напишем драйверы, которые, скорее всего кроме автора, никому не нужны.

Прошу прощения за Offtopic!


Defunct   (2004-09-23 15:11:00) [26]

Суслик ©   (23.09.04 10:52) [26]

А чего не нравится "развлекалово"? мне такие споры приносят море удовольствия ;) Тем более, что хорошие вопросы здесь появляются доволно редко, а так есть повод поговорить на интересные темы.

> На фик вредные советы давать...
А они вредные? Автор споткнется раз, и если в голове не пусто то сам поймет как надо делать.

Я вообще-то любитель всего недокументированого и извращенных решений. Вот как вы считаете можно сделать синхронную передачу данных по линиям, совсем не предназначенным для передачи данных, например по линии  ACK LPT порта или по линиям CTS/RTS последовательного порта? Думаю 99% здесь присутствующих скажут - нельзя и незачем, а я скажу - можно и целесообразно, так как сам делал и оно работает (COM порт превращается в 3 COM порта).

PS: Кант в своем труде "Критика практического разума" приводит примеры абсолютно логичных доказателств, но совершенно противоположных по смыслу, одного и того же явления.


Суслик   (2004-09-23 10:52:00) [27]


>  [25] Германн ©   (23.09.04 01:58)
>  [23] GuAV ©   (22.09.04 20:09)

Я тоже сказал, что нужно правильно программы писать, а не на except уповать.

------------------------------------------
Хочу заметить многоуважаемому Defunct'у, что это не первый раз, когда он  провоцирует обсуждение своих вредных советов. Это развлекалово такое? :)
На фик вредные советы давать...


Германн   (2004-09-23 01:58:00) [28]

Согласен с "Anatoly Podgoretsky ©   (22.09.04 16:24) [22] " в главном.
Но все таки Except - нужно учитывать!


Palladin   (2004-09-22 20:30:00) [29]

New raise EOutOfMemory exception... остальное лежит на дисциплине кодирования...


GuAV   (2004-09-22 20:09:00) [30]


> Но допустим, для случая когда в программе используется только
> NEW для выделения памяти под данные и данные не превышают
> 64k, тогда ответ [1] справедлив.

Ну, если был New, а потом Dispose, то будет ли AV ?
Ответы "да" или "нет" не верны.
Здесь AV или будет или нет - не известно, возможна и "русская рулетка".

Аналогично, если в P "мусор".


> Правильнее подумать об нормальной организации программы

И это имхо самый правильный ответ на вопрос сабжа.


Anatoly Podgoretsky   (2004-09-22 16:24:00) [31]

Да не расчитывайте вы на except его срабатывание для данного случая зависит от расположения звезд на небе.
Правильнее подумать об нормальной организации программы, чтобы не надо было проверять или по крайней мере выделить одно из значений адресов для признака не выделенности, НИЛ для этого хорошо подходит.


Суслик   (2004-09-22 16:06:00) [32]


>  [20] Defunct ©   (22.09.04 15:59)


> заволновался куда пропал старый добрый Тимохов. ;)

да это уже давно - редко ходишь

Я, конечно, перегнул немного про долгость try except. Но доля правды в этом есть. Да и вообще - не хорошо это. Надо писать правильно.


Defunct   (2004-09-22 15:59:00) [33]

> например, тебе нужно делать такую проверку 100000 раз в секунду (не спрашивай зачем, пример придумать легко)...

Да ладно, это уже извраты ;)

----------------
что такое "справедливость"? в мире цыфрЫ странное слово.
я, например, не берусь судить о справедливости.


Справедливость = True

PS: тока что посмотрел твою анкету, ты зачем себе сбрил усы? а я уже заволновался куда пропал старый добрый Тимохов. ;)


Суслик   (2004-09-22 15:39:00) [34]


>  [18] Defunct ©   (22.09.04 15:36)


> данные не превышают 64k, тогда ответ [1] справедлив.

мастак ты выкручиваться, как я посмотрю.

----------------
что такое "справедливость"? в мире цыфрЫ странное слово.
я, например, не берусь судить о справедливости.

хочешь пример, когда такой способ ужасен?
например, тебе нужно делать такую проверку 100000 раз в секунду (не спрашивай зачем, пример придумать легко)...
можешь попробовать, что у тебя получится (вернее не получится):))))


Defunct   (2004-09-22 15:36:00) [35]

Доводы [15][17] - убедительные, согласен что в общем случае нельзя и незачем.

Но допустим, для случая когда в программе используется только NEW для выделения памяти под данные и данные не превышают 64k, тогда ответ [1] справедлив.


Суслик   (2004-09-22 14:45:00) [36]

Рихтер пишет, что в win2000 32 пространство с $00000000 по $0000ffff используется для выясления недейтствительных указателей: любая поптыка чтения или записи в память по этим адресам вызывает нарушение доступа.

Рихтер
windows для профессионалов
изд 4
стр 316


Amoeba   (2004-09-22 14:43:00) [37]

Интересно, куда пропал наш уважаемый автор вопроса?


Anatoly Podgoretsky   (2004-09-22 14:41:00) [38]

Defunct ©   (22.09.04 02:47) [8]
Если указатель не равен Nil, то он уже по определению указывает на данные.
Если указатель равен Nil, то тоже указывает на данные, по адресу ноль. Просто это условность, соглашение, что мол адрес 0 считаем недействительным. Некто у нас уже пытался удалить переменную.


GuAV   (2004-09-22 14:30:00) [39]

Defunct ©   (22.09.04 02:47) [8]

> Ну и что? (выражаясь словами автора )  "была над указателем
> проведена процедура New()", а что уж потом с данными сделали
> не важно, главное, что факт New, или @, или присваивания,
> или GetMem мы установили.

инменно, автор спрашивал про New, и я ещё и о том, что NEW от GETMEM Ваши способы не отличат.

> Что значит повезет? Если P=Nil тут уж однозначно ответ ясен.
> Попутно еще и валидность данных отловится (если не Nil).

Суслик ©  уже ответил.
> Вы так и не ответили.. Хотя я и не ждал, так как уверен,
> что вы использовали все перечисленные конструкции [4] в
> своих программах.

Третью - использую когда уверен что P указывает на данные.
при этом в except либо (действие и raise) либо ловлю не все исключения.

Первое и вторая - одно и то же, кроме того, что вторая работает ещё и для методов. Соответсвенно использую обычно первую, а для методов вторую, но НЕ для проверки на [0]
> был ли над указателем проведена процедура New();


Суслик   (2004-09-22 10:01:00) [40]

2defunct

> > Ловишь AV ? А ведь если "повезет" его может и не быть.
> Что значит повезет? Если P=Nil тут уж однозначно ответ ясен.
> Попутно еще и валидность данных отловится (если не Nil).

Я так понял, что выделенная фраза значит, что если P = nil, то точно будет AV?

Спешу заметить, что это не 100% гарантия. Все зависит от данных, с которыми работаешь: new можно делать не только для простых типов, но и для записей.

const
  cLen = 100000;
type
  pitem = ^titem;
  titem = record
     a: array[0..cLen] of longint;
  end;
var
  p: pitem;
begin
  p := nil;
  p^.a[cLen] := 10;
end;


Уверяю, что можно подобрать значение cLen таким, чтобы AV (p = nil!!!) не будет.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо