我正在使用我在 go 代码中访问的 new 在 C++ 中分配内存。 有没有办法在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 但稍后我们必须删除此内存。 所以我的问题是删除这段内存的方法是什么。
最佳答案
您可以导出执行释放的第二个函数。在你的 C++ 文件中应该做这样的事情:
extern "C" {
void create_buf(char **buf) {
*buf = new char[20];
...
}
void free_buf(char **buf) {
delete[] *buf;
*buf = nullptr;
}
}
现在您可以使用 CGo 调用另一个函数来执行清理。
关于c++ - 在go中删除内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27036670/