Должен ли я освободить выделенную строку после передачи ее на NewStringUTF()
?
У меня есть код, похожий на:
char* test;
jstring j_test;
test = some_function(); // <- malloc()s the memory
j_test = (*env)->NewStringUTF(env, test);
free(test); // <- should this be here?
Когда я освобождаю строку после передачи ее в NewStringUTF()
, я получаю ошибку signal 11 (SIGSEGV), fault addr deadbaad
. Если я удалю вызов free()
, ошибка исчезнет. Что я делаю неправильно?
Я вижу противоречивые мнения. Некоторые говорят, что я должен освободить его сам, некоторые говорят, что VM освобождает его, некоторые говорят, что виртуальная машина не освобождает его, и вы должны сделать странную магию вуду, чтобы освободить ее. Я в замешательстве.