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

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

ПАРАДОКС [D7, WinXP]


Ptr ©   (2003-03-26 13:10:00) 

Помогите pls советом! Код:
if Item = nil then exit;
if DLTable.Locate("Index", Integer(Item.Data), []) then DLTable.Delete;
выдает ошибку, т.к. выполняется второй оператор при Item = nil !!!
Что за бред?


Dred2k   (2003-03-29 01:04:00) [1]

> Item - указатель на ветвь дерева. Но это и неважно.
Важно.
> Ошибка обращения к памяти, так, как Item = nil.
Не обязательно. Любое левое для твоего приложения значение вызовет исключение...
> Вопрос в том, как может выполняться второй оператор если
> выполняется первое условие?
Никак. ;)
Просто не выполняется первое условие. Тут тебе люди правильно сказали - если есть указатель, то не факт, что он инициализирован в nil. Вот и все. При создании массива указателей тоже можно создать его так, что они будут в виде "хрен его знает", но никак не nil.
К сожалению, не нашел кода Assigned. Может, плохо искал (если кто покажет - буду рад на мыле, спасибо).
Вот такие вот дела...


Zelius   (2003-03-28 15:34:00) [2]

Удалено модератором
Примечание: Задай СВОЙ вопрос в отдельной своей ветке


MsGuns   (2003-03-26 22:04:00) [3]

nilиспользуется как нулевой указатель, т.е. указатель ни на что. В некоторых случаях, например при объявлении массива, но не заполнении его всего, обращение к элементу, который не определен (т.е.указатель на него не существует), произойдет прерывание по ошибке адресации (что вполне естесственно, ведь Паскаль не Жаба). Если же использовать функцию Assigned, то она не "вылетит", т.к. там предусмотрена проверка такого краха.

Хотя nil для многих объектов, которые объявлены, но не созданы, работает вполне корректно, потому что указатель ссылается на ОПИСАНИЕ объекта, а не на его экземпляр в памяти.

Примечание. Возможно, я не точен, но СМЫСЛ, надеюсь, передал верно.


Zelius   (2003-03-26 21:55:00) [4]

Всегда использую поле Data в TTreeView и TListView для хранения различной информации, ни разу не было проблем ни с nil ни с Assigned, использование зависит от настроения! Поэтому и говорю, что в данном случае это однофигственно! Если это не так, то прошу мне разъяснить это, извинения гарантируются! :)


MsGuns   (2003-03-26 20:51:00) [5]

>Anatoly Podgoretsky © (26.03.03 20:47)

Я накалывался с nil при работе с массивами, и не только, поэтому и сказал.


Anatoly Podgoretsky   (2003-03-26 20:47:00) [6]

MsGuns © (26.03.03 18:53)
Да если знать реализацию функции, но это не означает, что так будет всегда, поэтому функцию идеологически использовать правильнее, чем проводить проверку на nil


MsGuns   (2003-03-26 20:39:00) [7]

>Zelius © (26.03.03 20:23)

Если б не хамил, то объяснил бы тебе разницу, а так... Продолжай быть самым умным ;))


Zelius   (2003-03-26 20:23:00) [8]

Бред.Сив.Кобл... nil и Assigned - однофигственные вещи...


MsGuns   (2003-03-26 18:53:00) [9]

Между nil и Not Assigned две большие разницы ;))


Ptr   (2003-03-26 14:33:00) [10]

Большое спасибо!
Вариант с if not Assigned(Item) then Exit;
работает нормально.


Lord Warlock   (2003-03-26 14:27:00) [11]

Вообще-то в данном случае сравнивать с nil нельзя, нужно
if not Assigned(Item) then
Exit


malkolinge   (2003-03-26 14:25:00) [12]

А data у тебя случайно не поинтер ?


Ptr   (2003-03-26 14:21:00) [13]

Ok, вопрос из области потустороннего, поэтому снимаю......


Ptr   (2003-03-26 14:19:00) [14]

Item - указатель на ветвь дерева. Но это и неважно.
Ошибка обращения к памяти, так, как Item = nil.
Вопрос в том, как может выполняться второй оператор если выполняется первое условие?


_Shade   (2003-03-26 14:14:00) [15]

Что такое Item??? Какая ошибка??? Нет информации, нет ответа... Чего ж ты хочешь?!


Ptr   (2003-03-26 14:09:00) [16]

Люди !!! АУ ...................................


Наверх

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