저는 After Effects 플러그인을 개발 중이며 C++ 네트워크 라이브러리 인 raknet을 통합하려고합니다. raknet 라이브러리gethostname에서 IP 주소의 메모리에 액세스 할 수 없습니다
gethostbyname
를 호출하여 IPv4 주소를 얻으려고 노력하면 그 다음 여기에 내가 무엇을보고 몇 가지 사진입니다 오류 액세스 위반 읽기 위치
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++;
}
내지 0xFFFFFFFFFFFFFFFF
가 발생합니다.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"가 할당 된 지점까지 디버깅 할 수 없었을 것입니다. 그 for-loop 아래의 gethostbyname 호출은 의심스러워 보이지만 for-loop 조건식은 디버그 창에 의해 가려져 break 문 아래의 관련 부분이 잘 리기 때문에 볼 수 없습니다. 전체 몸체를 GetMyIP 함수 호출에 게시하십시오. – selbie
죄송합니다. 코드를 잊어 버렸습니다 .. 업데이트 된 질문 – jacobsgriffith