我在使用与 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;
}
最佳答案
第二行是调用一个函数,通过一个名为tab
的函数指针。该函数具有签名:
const char* f(const char*);
建议在调用 tab()
之前检查 key
和 tab()
是否为 NULL。
关于Android NDK C 库导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290759/