Android — нативный код C ++ возвращает значение мусора

Когда я вызываю собственный код в первый раз, он возвращает правильный результат, но во второй раз возвращает значение мусора.
Вот нативный код:

JNIEXPORT jstring JNICALL
Java_com_example_project_NativeCodes_method2(JNIEnv *env, jobject thisObj,
jstring st) {
const char* st1=env->GetStringUTFChars(st,0);
string str=st1;
const int len=str.length();
for(int i=0;i<len;i++){
if (str[i]>=97 && str[i]<=122)
str[i] = str[i]-32;
}
.....
env->ReleaseStringUTFChars(st, st1);
return env->NewStringUTF(str.c_str());
}

И в классе Java я объявляю нативный метод следующим образом

public class NativeCodes(){
static{
System.loadLibrary("abclib");
}
public synchronized native String method2(String s);
}

В MainActivity.java я вызываю нативный метод, например:

String s1,s2,s3,s4;
s1=edttxt1.getText().toString();
s2=edttxt2.getText().toString();

NativeCodes nc=new NativeCodes();
s3=nc.method2(s1);
s4=nc.method2(s2);

Во время отладки я обнаружил, что s3 получает правильный результат, тогда как s4 получает значение мусора.
Я думаю, что я освобождаю указатель правильно с env-> ReleaseStringUTFChars (st, st1);

Но если оператор Log () вставляется между двумя вызовами метода, оба вызова возвращают правильный результат. Например,

s3=nc.method2(s1);
Log.i("String","Value: "+s3);
s4=nc.method2(s2);
Log.i("String","Value: "+s4);

Это дает ожидаемый результат. Но я не хочу вставлять ненужный код, так как сделано много таких собственных вызовов методов.

где я делаю не так? Любая помощь высоко ценится.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector