Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

New()   Найти похожие ветки 

 
default ©   (2004-09-25 20:47) [40]

GuAV ©   (25.09.04 20:44) [39]
"и потом, New может делаться в первой либе из uses в initialization. А может он и в System/SysInit использован d initialization..."
да, но скорее всего автору нужно будет проверять корректность указателей память под которую он выделял
"Угу, а как потом найти их учитывая что
P1:=P2; ?
ведь @P1<>@P2 ! т.е. как сопоставить инфу указателю ? никак."
согласен, только не понял зачем это
ведь вроде как требовалось проверить значение указателя на актуальность(1)
вопрос автора был
"Ув. господа, подскажите, как узнать был ли над указателем проведена процедура New();"
и тут ты прав, но он скорее всего имел ввиду (1)


 
GuAV ©   (2004-09-25 21:02) [41]


> ведь вроде как требовалось проверить значение указателя
> на актуальность

если так то согласен, использование своего ММ решает.

однако в [2] я ответил на вопрос.


 
Defunct ©   (2004-09-26 00:40) [42]

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

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

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

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


Требую объяснений, в каком месте приведенного фрагмента неверный коментарий?


 
Defunct ©   (2004-09-26 00:50) [43]

Defunct ©   (26.09.04 00:40) [42]

Var P1 : PInteger = Nil;
   P2 : PInteger = Nil;

Begin
 New(P1);

 If P1<>Nil Then ShowMessage("P1 был создан, необязательно New");
 If P2<>Nil Then ShowMessage("P2 был создан, необязательно New");

 Try
   P1^ := 1000;
 Except
   ShowMessage("P1 не был создан");
 End;

 Try
   P2^ := 1000;
 Except
   ShowMessage("P2 не был создан");
 End;
End;


На этом вопрос исчерпан.


 
GuAV ©   (2004-09-26 00:57) [44]


> был создан, не обязательно New

P может указывать и на несозданный объект.

>   < не был создан >

В это место можно попасть если был создан а после уничтожен (хотя при этом же условии можно и не попасть туда)

или в случае исключения связанного с кодом в правой части :=.


 
GuAV ©   (2004-09-26 01:04) [45]

я немного изменил пример
Begin
P1:=Pointer($00BB16B8);

If P1<>Nil Then ShowMessage("P1 был создан, необязательно New");
If P2<>Nil Then ShowMessage("P2 был создан, необязательно New");

Try
  P1^ := 1000;
Except
  ShowMessage("P1 не был создан");
End;

Try
  P2^ := 1000;
Except
  ShowMessage("P2 не был создан");
End;
End;


 
Германн ©   (2004-09-26 01:25) [46]

Была когда-то ТВ-передача "Музыкальный ринг" (если не ошибаюсь).
Ну, на моей памяти "самая безполезная" передача. Так вот сей спор Defunct и GuAV  - из той же серии.

Самая моя любимая передача из этой серии - ринг между, увы покойным Резниковым, и Игорем Корнелюком.  
Люблю Питер!
Но не дороги Питерские!


 
Defunct ©   (2004-09-26 01:39) [47]

> я немного изменил пример

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

на экране:
"P1 был создан не обязательно New"
"P1 не был создан"
что в данном случае отражает специально сделанную ошибку.
ваш пример СЖУЛЬНИЧАЛ, подставив указателю левый адрес, а коментарии это жульничество раскусили.

вопрос исчерпан.


 
GuAV ©   (2004-09-26 01:51) [48]


> в третьих, вы пример после вашего изменения запускали, что
> на экране написано?

нет.
> что в данном случае отражает специально сделанную ошибку.
>
> ваш пример СЖУЛЬНИЧАЛ, подставив указателю левый адрес,
> а коментарии это жульничество раскусили.

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

второй способ такое же жульничество как и мой пример. кстати выполните ещё такое

New(P1);
Dispose(P1);
If P1<>Nil Then ShowMessage("P1 был создан, необязательно New");
// и далее по тексту...


 
Defunct ©   (2004-09-26 01:55) [49]

PS: как в этой ветке неоднократно отмечали:

>Суслик ©   (22.09.04 16:06) [21]
>Надо писать правильно.

>Anatoly Podgoretsky ©   (22.09.04 16:24) [22]
>Правильнее подумать об нормальной организации программы

GuAV ©   (22.09.04 20:09) [23]
>> Правильнее подумать об нормальной организации программы
>И это имхо самый правильный ответ на вопрос сабжа.

Palladin ©   (22.09.04 20:30) [24]
остальное лежит на дисциплине кодирования

>Суслик ©   (23.09.04 10:52) [26]
>Я тоже сказал, что нужно правильно программы

Если программа написана правильно, то коментарии в [1] абсолютно достоверны, и точно покажут был ли создан указатель или нет. Синтетические ошибки мне здесь показывать не нужно. Сам могу привести, сколько угодно ошибочных ситуаций.


 
GuAV ©   (2004-09-26 02:01) [50]


> Если программа написана правильно,

то [2] верно, т.е. [0] не нужно.

и конструкция
try...except никогда не используется для отлова AV при обращении к объекту, который не создан.

т.е. способ try..except - пример неправильного написания программы.

Вы защищаете недокументированные приёмы. вот я найду несколько ещё, в р-те которых ваш код не будет работать. за шо боролись на то и напоролись.


 
Defunct ©   (2004-09-26 02:40) [51]

GuAV ©   (26.09.04 02:01) [50]

> try...except никогда не используется для отлова AV при обращении к объекту, который не создан.

Сколько можно цепляться к мелочам?
да еще и после этого:
Defunct ©   (22.09.04 15:36) [18]
Доводы [15][17] - убедительные, согласен что в общем случае нельзя и незачем.

> Вы защищаете недокументированные приёмы. вот я найду несколько ещё, в р-те которых ваш код не будет работать. за шо боролись на то и напоролись.

Наврятли вам удастся меня удивить.
Насчет недокументированных приемов, да я их защищаю и часто применяю в защите от НСД, в защите от копирования, в коммуникациях.


 
GuAV ©   (2004-09-26 02:53) [52]


> Насчет недокументированных приемов, да я их защищаю и часто
> применяю в защите от НСД, в защите от копирования, в коммуникациях.

возможно. но в случае [0] это вредит.

> Сколько можно цепляться к мелочам?

вот не надо только утверждать что Defunct ©   (22.09.04 00:33) [1] верно.
а ведь я всего только и цепляюсь что оно не верно.


> Наврятли вам удастся меня удивить.

Удивлять счас не буду, т.к. дельфи под рукой нет.
на вскидку: ещё проверте New(P1); Dispose(P1); New(P2) там же.



Страницы: 1 2 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.057 c
14-1095775437
Cosinus
2004-09-21 18:03
2004.10.10
FAQ


14-1096002016
080D:07BBh
2004-09-24 09:00
2004.10.10
Caliber RM


11-1081521636
nester
2004-04-09 18:40
2004.10.10
Как в КОЛ узнать разрешение экрана текущее?


9-1086801828
Igoryok
2004-06-09 21:23
2004.10.10
Продолжение про Delphi X и концепцию дальнейшего развития


14-1095417379
Knight
2004-09-17 14:36
2004.10.10
FireBird...