[英]Issue with gethostbyname on 64-bit Windows
我正在嘗試將一些代碼從32位Windows(XP和Server 2003)遷移到64位Windows 7,而gethostbyname卻出現了一個怪異的問題。
我正在做這樣的事情:
struct hostent *hp;
hp = gethostbyname( host );
調用gethostbyname之后,指針hp-> h_addr_list無效。 它具有所有正確的數字,但看起來好像32位指針以某種方式塞入了錯誤的空間。
例如,我得到的是
hp-> h_addr_list = 0x0064bdd800000000
如果我手動交換前一半和后一半,使hp-> h_addr_list = 0x000000000064bdd8,則該指針有效,並指向正確的數據。
有時我也得到baadf00d而不是零(即hp-> h_addr_list = 0x0064bdd8baadf00d),
據我所知,一切都鏈接到正確的Winsock庫的64位版本,所以我不確定是什么原因導致這種問題。
您可能想嘗試使用getaddrinfo()
代替。 gethostbyname的文檔指出,不鼓勵使用它,並且現在不建議使用(因此其中可能有錯誤)。 我對您遇到的問題沒有任何經驗,但是我知道我使用getaddrinfo()
的代碼在x86和x64上的Windows 7和Windows XP上都能正常工作。
Microsoft使用baadf00d來指示未初始化的分配堆內存,因此將其清零可能是一個好主意。 測試以確保。
至於交換高位和低位,您沒錯,它確實被放錯了位置。 錯誤?
我遇到了同樣的問題。 問題在於,在項目設置中,“結構成員對齊”選項設置為4個字節(/ Zp4)。 我將此選項恢復為默認,從而解決了該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.