Нужно ли мне очистить символ *, переданный в NewStringUTF?
-
05-07-2019 - |
Вопрос
Я думаю, да, но все 12 лучших примеров, которые я нашел, делают что-то не иллюстративное, например
JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
return (*env)->NewStringUTF(env, "constant string");
}
поэтому для потомков я спрошу:это плохо, да?
JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
char *leak = malloc(1024);
leak[0] = '\0';
return (*env)->NewStringUTF(env, leak);
}
... и должно быть:
JNIEXPORT jstring JCALL Java_com_foo_dumbImpl(JNIEnv* env, jobject thisObj)
{
char *emptystring = NULL;
jstring r = NULL;
emptystring = malloc(1024);
emptystring[0] = '\0';
r = (*env)->NewStringUTF(env, emptystring);
free(emptystring);
emptystring = NULL;
return r;
}
Решение
ДА.(Просто чтобы это не выглядело оставшимся без ответа.)
Другие советы
Хорошо беспокоиться об утечках памяти, однако в этом случае утечек нет (оригинальный пример). " константна строка " является литеральной строкой; он не выделяется из кучи.
Итак, нет, вам не нужно очищать пройденный символ * (оригинальный пример).
Отредактированные примеры лучше иллюстрируют вашу точку зрения. В отредактированном примере да, вам нужно очистить переданную строку.
Не связан с StackOverflow