在应用程序中分配内存并在从dll / dylib调用的函数中释放它是否有任何问题?
但是要从dll / dylib中为函数分配内存并在调用者应用程序中释放它吗?
答案 0 :(得分:5)
对于静态库,它通常不是问题,但对于动态库通常不是一个好主意。特别是对于项目之间共享的图书馆。
问题是您需要确保内存分配函数(new / delete,malloc / free)在您的调用代码和动态库之间完全匹配。例如,如果您将C-runtime与可执行文件静态链接,但动态库是动态链接的(反之亦然),那么您可以为可执行文件和动态库运行malloc的单独代码。
为了避免任何问题,动态库通常会公开自己的alloc和free例程以保证一致性。
答案 1 :(得分:2)
从某种意义上说它没有根本问题,但是执行内存分配的应用程序必须返回一个指针,然后可以将其传递给DLL,以便它可以执行删除(或免费)。
当然,应用程序和DLL必须使用相同的内存分配,否则其他人会指出,否则会出现混乱。
虽然很危险并容易出错。一般情况下,如果在同一个地方处理内存分配和释放,并将指针传递给需要访问已分配对象的任何其他内容,则会更好。
我确实有一个C#库工作,它调用了一个DLL,它分配内存以返回(大)结果,并提供了一个删除方法,然后在应用程序完成它们时调用它。它运作良好。