Как проверить, допустим ли указатель? [дубликат]

Очень простое решение для .NET 4.5.1 +:

<ComboBox SelectedItem="{Binding SelectedItem, Delay=10}" ItemsSource="{Binding Items}"  />

Это работает для меня в большинстве случаев. Вы можете откатить выделение в выпадающем списке, просто запустите NotifyPropertyChanged без присвоения значения.

21
задан Emil H 14 June 2009 в 17:57
поделиться

7 ответов

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

Но чтобы ответить на ваш вопрос, вы можете уловить подобные вещи с помощью структурированной обработки исключений (SEH) .

При этом SEH - плохая идея .

10
ответ дан 29 November 2019 в 20:39
поделиться

Выявление такого рода ошибок устраняет симптомы, а не основную причину.

Следующие идиомы будут работать на любой платформе:

  • инициализировать все указатели на ноль

  • , если вы не может гарантировать, что указатель действителен, проверьте, что он не равен 0, прежде чем косвенно указывать его

  • при удалении объектов, установите указатель на 0 после удаления

  • будьте осторожны с проблемами владения объектами при передаче указателей в другие функции

12
ответ дан 29 November 2019 в 20:39
поделиться

Существуют функции IsBadReadPtr и [1145846Ptr] [1145846Pt]] это может делать то, что вы хотите. Также есть статья , в которой объясняется, почему вы не должны их использовать.

8
ответ дан 29 November 2019 в 20:39
поделиться
4
ответ дан 29 November 2019 в 20:39
поделиться

Вы, конечно, можете проверить, имеет ли указатель NULL!

if ( ptr == NULL ) {
   // don't use it
}

Это единственный переносимый тест, который вы можете выполнить. Windows действительно предоставляет различные API-интерфейсы для тестирования указателей, но, как отмечали другие, их использование может быть проблематичным.

5
ответ дан 29 November 2019 в 20:39
поделиться

Я думаю, вы ищете что-то вроде IsBadReadPtr.

Документация:

http://msdn.microsoft.com/en-us/library/aa366713 (VS.85 ) .aspx

1
ответ дан 29 November 2019 в 20:39
поделиться

Я не знаю насчет Windows, но в * nix вы можете установить обработчик сигнала SIGSEGV для перехвата исключения.

0
ответ дан 29 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: