У меня есть код, в котором я использую указатель для доступа к некоторому блоку данных. В некоторых редких случаях некоторые элементы блока данных пусты, и в результате указатель становится болтающимся. Фактически, я получаю правильный указатель, но программа дает сбой при попытке сделать что-то с указателем.
Обычный совет - избегать такого использования. Но, к сожалению, используемый мной фреймворк требует, чтобы я использовал этот тип методов доступа к данным.
Есть ли способ "проверить" недействительность указателя перед выполнением с ним каких-либо операций? Очевидно, проверка того, что указатель не равен NULL, не сработала. Я также пробовал это:
try
{
CString csClassName = typeid(*pMyPointer).name(); // Check error condition
// The line below fails due to dangling pointer (data block is not valid).
hr = pMyPointer->MyPointerMethod();
}
catch(bad_typeid)
{
return E_FAIL;
}
catch(...)
{
return E_FAIL;
}
Это правильный способ?