
背景: 本人 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 函数 |