Какова эквивалентная стандартная функция функции "AfxIsValidAddress"?

Я использовал MFC-проект, который должен быть реализован в независимой от платформы среде, используя функцию std вместо MFC/AFX.

Например: вместо CString std:: string, вместо CMutex будет использоваться std:: mutex.

Что такое независимый от платформы, C++11 std::- эквивалент функции MFC "AfxIsValidAddress"?

1 ответ

Решение

Там нет чего-то похожего на AfxIsValidAddress() в стандартной библиотеке, и кажется, что функция на самом деле не делает столько проверки в любом случае.

См. AfxIsValidAddress (и другие) "Не работать как объявлено", в котором говорится, что функция завершается просто проверкой NULL. Это также говорит о семействе допустимых функций проверки адресов:

Существует несколько Win32 API, похожих по функциональности: IsBadWritePtr, IsBadHugeWritePtr, IsBadReadPtr, IsBadHugeReadPtr, IsBadCodePtr, IsBadStringPtr, С 2004 года известно, что эти функции не подлежат восстановлению и никогда не должны использоваться. Всемогущий Рэймонд Чен и Ларри Остерман оба подробно обсуждают причины, поэтому просто короткая перефразировка: IsBad*Ptr все работает, получая доступ к проверенному адресу и перехватывая любые сгенерированные исключения. Проблема состоит в том, что некоторые из этих нарушений доступа (а именно, те, что на страницах защиты стека) никогда не должны быть обнаружены - ОС использует их для правильного увеличения стеков потоков.

Я думаю, что лучше просто следовать стандартным процедурам C++, чтобы проверить, что указатель не является nullptr или еще лучше ограничить использование указателей в максимально возможной степени.

Другие вопросы по тегам