jni icon indicating copy to clipboard operation
jni copied to clipboard

代码中存在多处内存泄露,排查了一个月终于定位到问题

Open aadog opened this issue 1 year ago • 2 comments

代码中存在多处内存泄露,排查了一个月终于定位到问题 1.关于数组操作,cgo内存模型有误,修复如下

func (env Env) GetStringUTF(ptr Jstring) string {
	jstr := C.jstring(ptr)
	size := C.GetStringUTFLength((*C.JNIEnv)(unsafe.Pointer(env)), jstr)
	if size == 0 {
		return ""
	}
	ret := make([]byte, int(size)+1)
	C.GetStringUTFRegion((*C.JNIEnv)(unsafe.Pointer(env)), jstr, C.jsize(0), C.GetStringLength((*C.JNIEnv)(unsafe.Pointer(env)), jstr), cmem(ret))
	return string(ret)
}

类似这种错误有多处,这是导致崩溃和jvm异常的根本原因

aadog avatar Feb 14 '24 16:02 aadog