क्या मुझे इसे 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?
, मैं एक signal 11 (SIGSEGV), fault addr deadbaad
त्रुटि मिलती है। अगर मैं free()
कॉल को हटा देता हूं, तो त्रुटि गायब हो जाती है। मैं क्या गलत कर रहा हूं?
मुझे विवादित राय दिखाई देती हैं। कुछ कहते हैं कि मुझे इसे खुद मुक्त करना चाहिए, कुछ कहते हैं कि वीएम इसे मुक्त करता है, कुछ कहते हैं कि वीएम इसे मुक्त नहीं करता है और आपको इसे मुक्त करने के लिए अजीब वूडू जादू करना चाहिए। मैं उलझन में हूं। तो आप इसके free()
करने की जरूरत है अगर आप malloc()
साथ test
आवंटित,:
मेमोरी लीक से बचने के लिए जेएनआई फ्रीिंग मेमोरी का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/1533378/jni-freeing-memory-to-avoid-memory-leak) – NPE