gpt4 book ai didi

C# 从 C malloc 释放 IntPtr

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:06 24 4
gpt4 key购买 nike

我在 C 上有一个带有 func 的非托管 DLL:

char* My_Func(char* data, int input_length, int output_length);

在这个函数中我有

result = (char*)malloc(output_lenght);
strcpy(result,test_char);
return(result);

在 C# 中我导入它

[DllImport(@"libsmev.DLL", CharSet = CharSet.Ansi)]
public static extern IntPtr My_Func([MarshalAs(UnmanagedType.LPStr)]string data, int input_length, out int output_length);

然后调用它

IntPtr result = My_Func (n1, n1.Lenght,n2);

如何释放 char* 或 IntPtr?

Marshal.FreeHGlobal(IntPtr) 和 Marshal.FreeCoTaskMem(IntPtr) 不起作用。

最佳答案

您需要导出一个可以使用free 释放指针的函数。正如您所注意到的,Marshal.FreeHGlobalMarshal.FreeCoTaskMem 不起作用,因为这些函数需要使用不同分配函数分配的指针。

如果您创建一个分配内存并返回指向该内存的指针的 API,您还必须在 API 中添加一个函数来释放内存。否则,您的 API 在用于分配内存的库(在本例中为 C 标准库)之外将不可用。

关于C# 从 C malloc 释放 IntPtr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com