我在c ++中使用new来分配内存,我在go代码中访问它。 有没有办法在go代码中删除这个内存。
这是我的代码流:
func f_Go(){
f_C(&buf);//c function
buff := C.GoBytes(unsafe.Pointer(buf), size) //after accessing buf we have to delete buf for avoiding memory leak
}
void f_C(char *buf){
f_C++(&buf);//c++ function
}
void f_C++(char **buf){ //here using new I am allocating memory
*buf = new[20];
memcpy(*buf, "hhhhhhjdfkwejfkjkdj", 20);//cpy content into *buf
}
使用这种方式我可以在go中访问buf但后来我们必须删除这个内存。 所以我的问题是删除这个内存的方法是什么。
答案 0 :(得分:2)
您可以导出执行释放的第二个函数。这样的事情应该在你的C ++文件中完成:
extern "C" {
void create_buf(char **buf) {
*buf = new char[20];
...
}
void free_buf(char **buf) {
delete[] *buf;
*buf = nullptr;
}
}
现在您可以使用CGo调用另一个函数来执行清理。