2012-07-02 4 views
3

Android NDK에서 사용하는 라이브러리의 C 코드에 문제가 있습니다.Android NDK C 라이브러리로 인해 seg 오류가 발생합니다.

에뮬레이터에서는 작동하지만 실제 장치에서는 작동하지 않습니다. 그것은 "libc - Fatal signal 11"(SIGSEGV)

라이브러리의 코드 조각으로 문제를 추적했지만 두 번째 줄의 내용을 이해하는 데 문제가 있습니다.

int lookup_mpz(mpz_t z, const char *(*tab)(const char *), const char *key) { 
    const char *data= tab(key); //--> Causes SEGV 
    if (!data) { 
    pbc_error("missing param: `%s'", key); 
    return 1; 
    } 
    mpz_set_str(z, tab(key), 0); 
    return 0; 
} 

답변

2

번째 라인은 함수를 호출하고, tab라는 함수 포인터들을 통해 여기

코드이다.

const char* f(const char*); 

keytab() 전에 tab()를 호출하는 NULL이 아닌 것을 확인 제안 : 함수는 서명이 있습니다.

+0

'tab '도 포인터로 검사하지 않는 이유는 무엇입니까? 나는'tab'에 NULL이 전달되었을 때'lookup_mpz'가 아닌 SIGSEGV가 구현 될 것이라고 생각합니다. –

+0

@AndreyErmakov, 좋은 지적입니다. 업데이트 됨. – hmjd

+0

감사합니다. 나는 그 기능 탭()을 어디서나 발견 할 수 없다. 그것은 문제 일 것이다. 그러나 그것은 여전히 ​​코드가 에뮬레이터에서 작동하지만 실제 장치에서는 작동하지 않는 이유를 설명하지 못합니다. – Phaestion

관련 문제