NewStringUTF () и освобождение памяти

Должен ли я освобождать выделенную строку после передачи ее в 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 () , я получаю сигнал 11 (SIGSEGV), ошибка addr deadbaad error. Если я удалю вызов free () , ошибка исчезнет. Что я делаю не так?

Я вижу противоречивые мнения. Некоторые говорят, что я должен освободить его сам, некоторые говорят, что виртуальная машина освобождает его, некоторые говорят, что виртуальная машина не освобождает его, и вы должны использовать странную магию вуду, чтобы освободить его. Я запуталась.

40
задан rid 4 June 2011 в 19:29
поделиться