ポインターを使用してデータブロックにアクセスするコードがあります。まれに、データブロックのいくつかのメンバーが空であり、その結果、ポインターがぶら下がります。実際、正しいポインターを取得できますが、ポインターで何かをしようとするとプログラムがクラッシュします。
通常のアドバイスは、このタイプの使用を避けることです。しかし悲しいことに、私が使用しているフレームワークでは、このタイプのデータ アクセス方法を使用する必要があります。
ポインターを操作する前に、ポインターが無効かどうかを「確認」する方法はありますか? ポインターが 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;
}
それは正しい方法ですか?