Текущий архив: 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