【发布时间】:2013-02-22 06:19:40
【问题描述】:
我正在开发一个后效插件,我正在尝试集成 raknet,它是一个 c++ 网络库。当 raknet 库试图通过调用获取 ipv4 地址时
gethostbyname
然后它抛出一个错误访问冲突读取位置 0xFFFFFFFFFFFFFFFF
int idx=0;
char ac[ 80 ];
int err = gethostname( ac, sizeof( ac ) );
(void) err;
RakAssert(err != -1);
struct hostent *phe = gethostbyname( ac );
if ( phe == 0 )
{
RakAssert(phe!=0);
return ;
}
for ( idx = 0; idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS; ++idx )
{
if (phe->h_addr_list[ idx ] == 0)
break;
memcpy(&addresses[idx].address.addr4.sin_addr,phe->h_addr_list[ idx ], sizeof(struct in_addr));
}
while (idx < MAXIMUM_NUMBER_OF_INTERNAL_IDS)
{
addresses[idx]=UNASSIGNED_SYSTEM_ADDRESS;
idx++;
}
这是我看到的一些图片。
http://jacobsgriffith.com/stackoverflow/noaccesserror.png
我已阅读此内容,但该库似乎没有错误地实现它。 Microsoft Documentation On gethostbyname
当我将鼠标悬停在 h_addr_list 和 h_aliases 上时,我得到了。
http://jacobsgriffith.com/stackoverflow/noaccess.jpg
有人有什么想法吗?为什么会失败我很确定这是一个常见的功能。
另外,winsock 和 winsock2 中 gethostbyname 函数的实现有什么区别吗?
【问题讨论】:
-
请不要发布代码图片。在您键入代码时发布您的代码。在任何情况下,它都不太可能在 gethostbyname 上崩溃,否则您将无法将它调试到将“phe”分配给有效的东西的地步。 gethostbyname 调用下方的那个 for 循环看起来很可疑,但我看不出你的 for 循环条件表达式是什么,因为它被调试窗口遮住了,并且 break 语句下面的相关部分被切断了。请将整个正文发布到您的 GetMyIP 函数调用中。
-
抱歉,我忘记包含代码了。更新问题
标签: c++ winapi network-programming gethostbyname