在go中删除内存

时间:2014-11-20 10:00:29

标签: c++ c go

我在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但后来我们必须删除这个内存。 所以我的问题是删除这个内存的方法是什么。

1 个答案:

答案 0 :(得分:2)

您可以导出执行释放的第二个函数。这样的事情应该在你的C ++文件中完成:

extern "C" {
    void create_buf(char **buf) {
        *buf = new char[20];
        ...
    }

    void free_buf(char **buf) {
        delete[] *buf;
        *buf = nullptr;
    }
}

现在您可以使用CGo调用另一个函数来执行清理。