c++ - 在go中删除内存

标签 c++ c go

我正在使用我在 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/

相关文章:

c++ - 使用静态 SFML 库时无法链接我的项目

c++ - wxWidgets 问题 - libwx_gtk3u_gl-3.1.a : no such file or directory

c++ - 递归(从 2 到(2 乘以 n)的偶数之和 ex : input : n=6, 输出:2+4+6

c - 危险的指针转换导致失去 const 资格

Go 返回错误以及函数的接口(interface)

mongodb - golang : *mongo.数据库没有字段或方法CreateCollection

c++ - 启动远程进程并监控状态

c - main方法没有被执行

c++ - 如何将浮点值移位到可以精确表示的特定小数位数的最接近的值?

cookies - 我可以使用 session cookie 而不是 csrf 吗?