小编Nik*_*hil的帖子

有没有办法检查指针是否悬空?

我有一个代码,我使用指针访问一些数据块.在极少数情况下,数据块的一些成员是空的,因此指针变为悬空.事实上,我得到了正确的指针,但程序在尝试用指针做某事时崩溃了.

通常的建议是避免这种用法.但遗憾的是,我使用的框架要求我使用这种类型的数据访问方法.

有没有办法在用它做任何操作之前"检查"指针是否无效?显然,检查指针不等于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)

这是正确的方法吗?

c++ mfc pointers dangling-pointer

11
推荐指数
2
解决办法
6315
查看次数

64 位机器上的 DWORD 和 DWORD_PTR

*_PTR为支持 Win64 的 64 位寻址,向 Windows API 添加的类型很少。

SetItemData(int nIndex,DWORD_PTR dwItemData)
Run Code Online (Sandbox Code Playgroud)

当我将第二个参数作为DWORD.

我想知道,如果这个特定的 API 会在 64 位机器上失败,如果我将第二个参数作为DWORD. 如何测试失败场景?

谢谢,尼基尔

windows winapi mfc

5
推荐指数
1
解决办法
9981
查看次数

标签 统计

mfc ×2

c++ ×1

dangling-pointer ×1

pointers ×1

winapi ×1

windows ×1