Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Вниз

ПАРАДОКС   Найти похожие ветки 

 
Ptr   (2003-03-26 13:10) [0]

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


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

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


 
_Shade   (2003-03-26 14:14) [2]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

>Zelius © (26.03.03 20:23)

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


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

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


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

>Anatoly Podgoretsky © (26.03.03 20:47)

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


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

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


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

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

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

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


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

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


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

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



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

Форум: "Базы";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
4-54942
NewEdik
2003-02-17 21:53
2003.04.17
Отступ в ComboBox


1-54558
Provodnick
2003-04-06 05:19
2003.04.17
CTRL+ENTER в MEMO


3-54438
kie
2003-04-01 23:00
2003.04.17
Добавление данных в DB


1-54638
Serj
2003-04-04 12:47
2003.04.17
Обработка нажатия клавиши в ComboBox


7-54912
Alek_1
2003-02-24 14:29
2003.04.17
Как заблокировать клавиатуру и мышь???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский