2012-07-02 2 views
3

У меня возникли проблемы с кодом c из библиотеки, которую я использую с Android NDK.Библиотека 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*); 

Предлагайте проверки, что key и tab() не NULL перед вызовом tab().

+0

Почему бы не проверить 'tab', так как это указатель? Я думаю, в случае, когда NULL перешел на 'tab', это вызовет SIGSEGV в его реализации, а не в' lookup_mpz' –

+0

@AndreyErmakov, хороший момент. Обновлено. – hmjd

+0

Спасибо, что помогает. Я просто не могу найти эту вкладку функций() в любом месте, это может быть проблемой. Но это все еще не объясняет, почему код работает на эмуляторе, но не на реальном устройстве. – Phaestion

Смежные вопросы