【发布时间】: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 的工作方式)。由于回调以及我不想发送副本,因为这将是一个巨大的浪费,这就是发生的事情:/