我在使用Android NDK的库中使用c代码时遇到了一些问题。
它适用于模拟器,但不适用于真实设备。它给了我一个“libc - 致命信号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;
}
答案 0 :(得分:2)
第二行是通过名为tab
的函数指针调用一个函数。该函数具有签名:
const char* f(const char*);
建议在调用key
之前检查tab()
和tab()
是否为空。