2012-12-02 1 views
1

소개 네트워킹 클래스 인 P2P Twitter 클라이언트에서 작업 중입니다. 내 동료에게 자신을 등록 할 수있는 방법을 제공하려고 시도하고 있으므로 다른 동료가 그것을 발견 할 수 있습니다. DNSSD.Register()를 호출 할 수 있도록 DNS TXT 레코드를 만듭니다.이 오류의 원인은 무엇입니까 (java) : "0x0 rip = 0x106282bae의 잘못된 메모리 액세스"

무엇이 오류 (자바)의 원인이되는

: "위치 0x0으로 립의 잘못된 메모리 액세스 = 0x106282bae"여기

것은 그것의 원인이되는 방법이다 그러나이 방법은 호출 될 때 읽기 오류가 :

import com.apple.dnssd.*; 
    public static void announce()throws com.apple.dnssd.DNSSDException{ 
     TXTRecord txtRec = new TXTRecord(); 
     txtRec.set("Version", "1.1"); 
     txtRec.set("EncryptionSupport", "false"); 
     txtRec.set("DisplayName", profile.getPropertyValue("UserName")); 
     txtRec.set("UserID", profile.getPropertyValue("UserID")); 

     RegisterListener myRegisterListener = null; 
     DNSSDRegistration reg = null; 
     RegisterListener myRegistrationListener = null; 
     reg = DNSSD.register 
      (0, DNSSD.ALL_INTERFACES, profile.getPropertyValue("UserName"), 
      profile.getPropertyValue("DNSSDServiceName"), 
      null, null, 4444, txtRec, myRegistrationListener); 
    } 

"reg = ..."행은 오류를 발생시키는 행입니다. 내가 뭘 잘못하고 있는지에 대한 아이디어는? 이것의 많은 부분은 내가 완전히 이해하지 못하는 예에서 취해진 것입니다.

+0

이것은 원시 라이브러리의 버그처럼 보입니다. Java는이 오류 메시지를 생성하지 않습니다. –

+0

당신이하지 말아야 할 곳에'null'을 건네도, 라이브러리는 네이티브 메소드로 사용하기 전에 인수를 검사해야합니다. –

답변

6

문제는 DNSSD.register() 메서드의 마지막 인수가 유효한 개체 여야한다는 것입니다. NULL 포인터로 전달하기 때문에 호출 될 때 0x0 위치에 대한 잘못된 액세스가 발생합니다.

이 방법은 docs입니다.

+0

+1, 잘 잡혔습니다. – dreamcrash

+0

감사합니다. 이제 내가 그 매개 변수를 무엇으로 설정해야하는지 알았다면 ... –

0

쿠마르 요코가 맞았습니다. null RegisterListener를 전달하면 문제가 발생합니다. RegisterListener는 "Announcer"라고 불리는 새로운 클래스에서 구현해야했던 인터페이스입니다. 이 클래스를 구현하고 그것을 인스턴스화 한 다음이를 마지막 매개 변수로 전달하여 내 코드를 컴파일하고 실행했습니다. 모두에게 감사 드리며 앞으로의 모든 독자를 도울 수 있기를 바랍니다.

관련 문제