我正在编写一个JUnit测试来验证以下本机方法:
public native String mkString(byte[] bytes);
作为本机代码的一部分,我调用一个在第三方共享库中返回const char *
的函数。我做了一个dlsym并获得了一个指向第三方函数的函数指针。
mkStringFn = (const char *(*)(char*, int)) dlsym(handle, "mkString");
在调试时我发现第三方函数mkString
中的return语句中的while,返回变量总是具有正确的值。
但是我看到,对于相同的输入,我从调用函数指针获得的返回值有时是""
,有时则是正确值。
这就是我调用函数指针的方法
madeString = (* mkStringFn)((char *)bufferPtr, len); //madeString is sometimes empty (not NULL) and sometimes has the right value
我验证了传递给函数指针的bufferPtr和len参数是否有效。
为什么这种方法有时会起作用?