如果传递DWORD
,因为它适合到DWORD_PTR
的功能不会失败。然而,指针保证适合于在64位平台上的DWORD_PTR
而不是而不是到DWORD
。
因此,这段代码是正确的:
int *before_ptr = new int;
yourListBox.SetItemData(index, (DWORD_PTR) before_ptr);
int *after_ptr = (int *) yourListBox.GetItemData(index);
ASSERT(before_ptr == after_ptr); // Succeeds.
delete after_ptr; // Works.
但是这个代码是错误的,会悄悄地截断指针,其低32位:
int *before_ptr = new int;
yourListBox.SetItemData(index, (DWORD) before_ptr);
int *after_ptr = (int *) yourListBox.GetItemData(index);
ASSERT(before_ptr == after_ptr); // Fails.
delete after_ptr; // Undefined behavior, might corrupt the heap.
你是正确的指针将不适合在64位DWORD,它会截断pointer.How我可以测试这种失败的情况下,我的指针将截断,我会得到不想要的价值。 – Nikhil 2011-05-03 10:26:50
@Nikhil,我试图修改我对这种情况的回答。 – 2011-05-03 10:35:15
感谢您的快速和详细的解释.... – Nikhil 2011-05-03 10:55:24