【发布时间】:2018-04-12 19:09:22
【问题描述】:
我有大量需要在 C# 中使用的 C 代码。示例:
long foo(char** mystring);
void free_string(char* mystring);
foo() 正在使用malloc() 为mystring 分配内存。我尝试了几种从 C# 调用此函数的方法,但我无法释放 mystring。您能否给我一些关于如何拨打foo() 的指导,以便我以后可以免费mystring?
比如char**用StringBuilder[]表示,那我怎么用free_string()中释放呢?
【问题讨论】:
-
您究竟是如何调用 C 代码的?我们可以提供一些您尝试的示例代码吗?您的问题在目前的状态下太模糊,无法准确回答。
-
在本机中分配内存以在托管中释放对于确保调用者确切知道他们在做什么会产生相当大的开销,您可能需要考虑在托管代码中分配内存的其他技术,例如像这样stackoverflow.com/questions/8425501/…
-
我尝试以多种方式调用 C 代码,但我对其中任何一种都没有信心。例如:我试过'static extern long foo([MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] StringBuilder[] mystring);'我尝试使用“IntPtr ptr”而不是“StringBuilder”和 Marshal.FreeCoTaskMem(ptr)。它不起作用
标签: c# c memory-management interop