Есть ли способ проверить, не болтается ли указатель?

У меня есть код, в котором я использую указатель для доступа к некоторому блоку данных. В некоторых редких случаях некоторые элементы блока данных пусты, и в результате указатель становится болтающимся. Фактически, я получаю правильный указатель, но программа дает сбой при попытке сделать что-то с указателем.

Обычный совет - избегать такого использования. Но, к сожалению, используемый мной фреймворк требует, чтобы я использовал этот тип методов доступа к данным.

Есть ли способ "проверить" недействительность указателя перед выполнением с ним каких-либо операций? Очевидно, проверка того, что указатель не равен 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;
}

Это правильный способ?

11
задан Palec 3 August 2017 в 14:57
поделиться