背景: 本人 Javer,Go 只是新手,使用 Go 打包 dll 给 C#/Java 调用.
export 的方法大概如下:
//export GmDecrypt
func GmDecrypt1(dataStrC *C.char, privateKeyC *C.char) *C.char {
x := C.CString("xxx")
defer C.free(unsafe.Pointer(x))
return x
}
发现在 C#/Java 中调用后获取到的值是乱码,猜测可能是C.free(unsafe.Pointer(x))
导致的.
有什么好的处理方法吗?
1
westoy 2023-07-02 22:38:58 +08:00
和 Go 没关系啊
单独声明一个函数去做释放 你这都返回了个野指针了 |
2
learningman 2023-07-02 22:45:03 +08:00
你 defer 的语句把这个指针对应的内存释放掉了
|
3
jorneyr 2023-07-03 08:16:43 +08:00
调用者负责释放。
|
4
virusdefender 2023-07-03 09:54:57 +08:00
return x 返回了一个指针,而指针对应的内存被 defer free 了
|
5
0xWalker 2023-07-03 11:12:31 +08:00
你的猜想是对的,自己释放掉了内存
跟楼上说的一样,如果是这种实现,这块内存空间是由调用者去管理的 当然你也可以调用者申请内存,在入参传入指针,Go 写入到该段内存空间 |
6
lasuar 2023-07-03 16:28:42 +08:00
再写一个释放的函数?还是调用方直接释放
|
7
bombless 2023-07-03 18:24:57 +08:00
应该让 java 去分配一段内存然后把指针传递给你这个 jna 函数
|