问题描述
我正在寻找一种释放Go中分配的c结构的内存的方法。我试图使用C.free释放内存,但是它抛出了curl --max-time 900 --location --request GET "https://XXXXXX/YYYYY?taskName=AssertTag_Task&projectName=POC" --header "Content-Type: application/json" --header "Authorization: Basic a2FydGhpa2E3ODk6MmQ0dWI0OTNGM0VTM3BtdXpxUl123456FOd3ph"
错误。
malloc: *** error for object 0xc00024dfb0: pointer being freed was not allocated
package main
/*
#include "stdlib.h"
#include "stdint.h"
#include "stdio.h"
typedef struct FileInfo{
char *Name;
char *Path;
}FileInfo;
typedef struct Result{
FileInfo **files;
}Result;
*/
import "C"
import (
"unsafe"
)
func GetValue() {
var aiList []*C.struct_FileInfo
aif := &C.struct_FileInfo{}
aif = (*C.struct_FileInfo)(C.malloc(C.size_t(unsafe.Sizeof(C.struct_FileInfo{}))))
aif.Name = C.CString("abcd")
aif.Path = C.CString("/path")
aiList = append(aiList,aif)
air := &C.struct_Result{}
air = (*C.struct_Result)(C.malloc(C.size_t(unsafe.Sizeof(C.struct_Result{}))))
air.files = &aiList[0]
pTraddr := *((*C.int64_t)(unsafe.Pointer(&air)))
exportToFFI(pTraddr)
}
func FreeMemory(pointer *int64,totalFiles int64){
air := (*C.struct_Result)(unsafe.Pointer(pointer))
files := (*[1 << 30]C.struct_FileInfo)(unsafe.Pointer(*air.files))[:totalFiles]
for _,item := range files {
C.free(unsafe.Pointer(&item.Name))
C.free(unsafe.Pointer(&item.Path))
C.free(unsafe.Pointer(&item))
}
}
方法将把指针导出到FFI方法,并且在捕获值之后,程序将尝试清除C.malloc分配的内存。 GetValue
方法接受一个指针和所分配数组的长度。
我该如何解决?
任何建议将不胜感激。 干杯。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)