2015-11-19 16 views
0
jstring result = NULL; 
**const char *nativeString = NULL;** 

if (messageMe != NULL) { 
    jstring jstrBuf = (envLocal)->NewStringUTF(value); 
    result = (jstring) envLocal->CallStaticObjectMethod(g_clazz, messageMe, 
      jstrBuf); 
    **nativeString = envLocal->GetStringUTFChars(result, 0);** 
    g_JavaVM->DetachCurrentThread(); 
    return nativeString; 

嗨如上面的示例代碼所示,我使用GetStringUTFChars填充nativeString。我的需要是返回這個nativeString來調用另一個本地調用函數。如果我想返回從GetStringUTFChars獲得的C sting,我應該使用ReleaseStringUTFChars嗎?

我必須使用ReleaseStringUTFChars()。如果我使用它,那麼它不會釋放內存,調用函數的nativeString值將無效。

我在其他堆棧溢出問題中沒有清楚地看到這個答案。請幫忙。

+1

是的,你必須釋放緩衝區。處理這個問題的最簡單方法是返回一個std :: string而不是char * –

回答

0

GetStringUTFChars將爲它返回的字符串分配內存,並且ReleaseStringUTFChars釋放內存。所以當你使用GetStringUTFChars返回的數據時,你應該調用ReleaseStringUTFChars

+0

是的,但是有一個問題,因爲我將數據返回給調用函數。我沒有完成這個實現的功能。 –

+0

然後返回一份副本。 – Michael

+0

char * getSomeString(JNIEnv * env,jstring jstr){char * retString; char * intermedString; intermedString =(* env) - > GetStringUTFChars(env,jstr,NULL); retString = strdup(intermedString); (* env) - > ReleaseStringUTFChars(env,jstr,intermedString); return retString; } –

相關問題