如果傳遞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