【问题标题】:Freeing memory of a cgo library释放 cgo 库的内存
【发布时间】:2018-05-24 15:13:12
【问题描述】:

我有点乱,我看不出我是如何摆脱它的...... 我得到了什么: * 我使用 cgo 构建的库 (dll)。 * 使用此库 (dll) 的 c++ 应用程序。

我该怎么做: 我尝试释放我在 c++ 应用程序的 cgo 库中分配的内存。

我使用什么工具: 要构建库 (dll),我使用 cgo,然后使用 VS cmd 创建存根库。 我使用 Visual Studio 2017 编译应用程序(使用 /MD)选项。

我会得到什么: 检测到严重错误 c0000374

据我所知,这是我释放在 dll 库中分配的数据的结果。 我会注意到,如果我创建一个测试应用程序并使用 gcc 编译它,则不会发生这种情况。

不幸的是,我无法避免使用 VS,因为我正在处理一些更喜欢 VS 的 CUDA 东西:/

【问题讨论】:

  • 为什么你试图从 C++ 应用程序中释放 Go 内存?您无法释放 Go 运行时管理的内存。
  • 这有点乱...但我实际上是在释放在 go 中分配的 c 内存,或者更详细地说:我有一个回调函数,它从 go 接收它的变量,但作为一些其中是字符串,它们已被转换为 c 字符串,这些字符串将它们移动到 c 内存中(这就是 cgo 的工作方式)。由于回调以及我不想发送副本,因为这将是一个巨大的浪费,这就是发生的事情:/

标签: c++ go malloc free cgo


【解决方案1】:

经过大量搜索,使用go,cgo和Visual Studio时无法创建一个堆。为了解决这个问题,我添加了一个释放 cgo 库中 cgo 内存的 free 函数。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2021-05-23
    • 2021-09-11
    相关资源
    最近更新 更多