![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли проверить указатель на корректность?
SPeller © (2010-04-29 04:17:00)Есть ли стандартные механизмы проверки некого указателя на корректность? Например, что этот блок памяти выделен текущим менеджером памяти и при обращении к нему не будет AV?
Игорь Шевченко (2010-04-30 11:12:00) [21]Демо © (30.04.10 01:45) [35]
Займись на досуге увеличением на единицу переменной типа Pointer
И скажи, что такое ссылка в терминах Object pascal
Демо (2010-04-30 09:08:00) [22]
> Германн © (30.04.10 01:54) [36]
>
> > Задайся вопросом, может ли ссылка быть указателем на произвольный
>
> > кусок памяти?
>
> А где в сабже упомянут термин "ссылка"?
> А у отвечающих на форуме ДМ нет принципиальной разницы между
> ссылкой и указателем. Бо ни о какой "адресной арифметике"
> они знать не хотят.
Вот именно!
Про ссылки вопроса не было-)
Некий указатель - расплывчато достаточно.
Германн (2010-04-30 01:54:00) [23]
> Задайся вопросом, может ли ссылка быть указателем на произвольный
> кусок памяти?
А где в сабже упомянут термин "ссылка"?
А у отвечающих на форуме ДМ нет принципиальной разницы между ссылкой и указателем. Бо ни о какой "адресной арифметике" они знать не хотят.
Демо (2010-04-30 01:45:00) [24]
> И вопрос автора именно по Дельфи.
Задайся вопросом, может ли ссылка быть указателем на произвольный кусок памяти? А указатель?
Можно ли указатель на PChar увеличить на единицу? А ссылку на объект?
Германн (2010-04-30 01:16:00) [25]
> К указателям применима адресная арифметика, к ссылкам -
> нет
Какая-то жуткая смесь из Си, Паскаля и иже с ними.
Но тут ведь форум ДМ, ne's pa?
И вопрос автора именно по Дельфи.
Демо (2010-04-30 01:14:00) [26]
> Плохиш © (30.04.10 00:44) [31]
> Мая рыдалъ...
Не плачь.
Игорь Шевченко (2010-04-30 00:45:00) [27]
> К указателям применима адресная арифметика, к ссылкам -
> нет, так как не имеет смысла.
"Покажи нашему человеку со средним образованием, покажи ему твердый шанкр и спроси: "какой это шанкр - твердый или мягкий?" - он обязательно брякнет: "мягкий, конечно"; а покажи ему мягкий - так он и совсем растеряется. А там - нет. Там, может быть, не знают, сколько стоит "зверобой", но уж если шанкр мягкий, так он для каждого будет мягок и твердым его никто не назовет... "
С указателем все то же самое...
Плохиш (2010-04-30 00:44:00) [28]Мая рыдалъ...
Демо (2010-04-30 00:39:00) [29]
> Что я делаю не так?
Всё.
> Игорь Шевченко © (30.04.10 00:15) [28]
> > Ссылки на экземпляры классов - это не указатели.почему
> ?
К указателям применима адресная арифметика, к ссылкам - нет, так как не имеет смысла.
Плохиш (2010-04-30 00:35:00) [30]
> Демо © (30.04.10 00:02) [27]
> Ссылки на экземпляры классов - это не указатели.
А что это?
> > А смысл? Типa, у дерьмокодера левая рука не знает, что
> кодит
> > правая? Или чаво вчера накодил сегодня забыл?
>
>
> Думаешь, ты всегда помнишь свой дерьмокод?
За много лет ни разу не потребовалось обсуждаемого сабжа. Что я делаю не так?
Игорь Шевченко (2010-04-30 00:15:00) [31]
> Ссылки на экземпляры классов - это не указатели.
почему ?
Демо (2010-04-30 00:02:00) [32]
> Anatoly Podgoretsky © (29.04.10 12:19) [14]
> > Ins (29.04.2010 11:05:12) [12]Не на ожидаемые, а на
> правильные, а то можно получить ожидаемыt, но не совсем
> те, поскольку возможна завязка Obj := Create, Free, Create.
> И даже без второго Create
Ссылки на экземпляры классов - это не указатели.
> А смысл? Типa, у дерьмокодера левая рука не знает, что кодит
> правая? Или чаво вчера накодил сегодня забыл?
Думаешь, ты всегда помнишь свой дерьмокод?
> SPeller © (29.04.10 04:17)
> Есть ли стандартные механизмы проверки некого указателя
> на корректность? Например, что этот блок памяти выделен
> текущим менеджером памяти и при обращении к нему не будет
> AV?
Если бы возникла необходимость, я бы для интереса реализовал простейший набор функций, которые через стандартные функции выделяли/освобождали память, но при этом вели справочник выделенных блоков памяти.
Неэффективное решение, и работать будет только для явных выделений памяти, но рабочее.
Игорь Шевченко (2010-04-29 21:14:00) [33]У венды есть такой способ, HeapValidate+HeapWalk для юзеровских функций и VirtualQuery для системных.
Anatoly Podgoretsky (2010-04-29 20:02:00) [34]> Ega23 (29.04.2010 17:09:24) [24]
Не корректный указатель не обязан приводить к исключению
Ega23 (2010-04-29 17:09:00) [35]try..except - чем не проверка?
Rouse_ (2010-04-29 16:21:00) [36]
> Например, что этот блок памяти выделен текущим менеджером
> памяти и при обращении к нему не будет AV?
IsBadReadPtr / IsBadWritePtr устроит? Ну или VirtualQuery()...
b z (2010-04-29 16:05:00) [37]
> рядовым участником
А не рядовым (кстати что это?) уже догма? :)
Ins (2010-04-29 15:00:00) [38]
> Утверждаешь без IMHO.
)))))))
Довожу до сведения, совершенно ВСЕ сказанное на любом форуме любым рядовым участником является IMHO. И да, от своих слов не отказываюсь.
oxffff (2010-04-29 14:52:00) [39]
> Ins © (29.04.10 14:43) [19]
>
> > oxffff © (29.04.10 14:16) [18]
>
>
> Предлагаешь автору в своей программе реализовать что-то
> похожее на автоматический уборщик мусора? Ну а я предлагаю
> аккуратно работать с указателями. За всю практику ни разу
> не возникала потребность проверить валидность указателя
> или ссылки. Что я делаю неправильно?
Утверждаешь без IMHO.
> Так вот, для выявления таких корректных указателей механизма
> не то что не существует, его и не может существовать.
Ins (2010-04-29 14:43:00) [40]
> oxffff © (29.04.10 14:16) [18]
Предлагаешь автору в своей программе реализовать что-то похожее на автоматический уборщик мусора? Ну а я предлагаю аккуратно работать с указателями. За всю практику ни разу не возникала потребность проверить валидность указателя или ссылки. Что я делаю неправильно?