我有一个代码,我使用指针访问一些数据块.在极少数情况下,数据块的一些成员是空的,因此指针变为悬空.事实上,我得到了正确的指针,但程序在尝试用指针做某事时崩溃了.
通常的建议是避免这种用法.但遗憾的是,我使用的框架要求我使用这种类型的数据访问方法.
有没有办法在用它做任何操作之前"检查"指针是否无效?显然,检查指针不等于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;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
*_PTR为支持 Win64 的 64 位寻址,向 Windows API 添加的类型很少。
SetItemData(int nIndex,DWORD_PTR dwItemData)
Run Code Online (Sandbox Code Playgroud)
当我将第二个参数作为DWORD.
我想知道,如果这个特定的 API 会在 64 位机器上失败,如果我将第二个参数作为DWORD. 如何测试失败场景?
谢谢,尼基尔