3

我在使用与 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;
}
4

1 回答 1

2

第二行是通过一个名为 的函数指针调用一个函数tab。该函数具有签名:

const char* f(const char*);

建议在调用之前检查keyandtab()不为 NULL tab()

于 2012-07-02T09:14:08.033 回答