簡體   English   中英

在64位Windows上的gethostbyname問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM