1

在应用程序中分配内存并在从 dll/dylib 调用的函数中释放内存有什么问题吗?

但是要从 dll/dylib 的函数中分配内存并在调用者应用程序中释放它?

4

2 回答 2

5

对于静态库,这通常不是问题,但对于动态库通常不是一个好主意。特别是对于项目之间共享的库。

问题是您需要确保内存分配函数(new/delete、malloc/free)在您的调用代码和动态库之间完全匹配。例如,如果您将 C 运行时与可执行文件静态链接,但动态库是动态链接的(反之亦然),那么您有单独的代码为可执行文件和动态库运行 malloc。

为了避免任何问题,动态库通常会公开它们自己的 alloc 和 free 例程以保证一致性。

于 2012-08-13T15:47:08.187 回答
2

不,从某种意义上说它可以工作没有根本问题,但是执行内存分配的应用程序必须返回一个指针,然后可以将其传递给 DLL,以便它可以执行删除(或释放)。

当然,应用程序和 DLL 必须使用与其他人指出的相同的内存分配,否则会出现混乱。

虽然很危险,而且容易出错。一般来说,最好在同一个地方处理内存分配和解除分配,并将指针传递给需要访问已分配对象的任何其他对象。

我确实为一个 C# 库工作,该库调用一个 DLL,它分配内存以返回(大)结果,并提供了一个删除方法,然后在应用程序完成它们时调用该方法。它工作得很好。

于 2012-08-13T15:58:55.593 回答