C# pinvoke 释放 native c++ 内存

标签 c# c++ memory-leaks pinvoke

如果我有一个像这样返回 char* 的 C++ 函数:

char *cctalk_app_event_name(DG_CCTALK_APP_EVT_CODE);

以及对应的C#签名:

[System.Runtime.InteropServices.DllImportAttribute("cctalk.dll", EntryPoint = "cctalk_app_event_name", CallingConvention = CallingConvention.Cdecl)]
    public static extern System.IntPtr cctalk_app_event_name(DG_CCTALK_APP_EVT_CODE param0);

如果 native 代码返回一个分配有 new 关键字的 char*,我肯定会在每次调用此函数 C# 时发生内存泄漏?有什么办法可以释放那段内存吗?

最佳答案

我从查看函数名称的直觉是,这很可能会返回一个指向 DLL 中的字符串常量的指针,在这种情况下,您无论如何都不需要担心释放指针。

如果 SDK 的手册 (link here) 没有任何用处,那么我会反汇编 DLL 并查看该函数的作用,但在建立之前不要担心如何删除它你需要的。

关于C# pinvoke 释放 native c++ 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294036/

相关文章:

c# - 如何根据关联选择实体,例如原始 SQL 中的 WHERE IN 查询

c++ - 初始化中模板转换运算符类型推导的规则是什么?

javascript - XMLHttpRequest 泄漏

C++。如何比较 2 个对象 vector

c++ - 创建比较两个对象的方法

iphone - 任何用于查找 ipad 内存使用情况的应用程序

c - Mac OS 10.7 (Lion) 上类似 Valgrind 的工具

c# - AutoMapper 和展平嵌套数组

c# - 将 Outlook 电子邮件的所有附件转换为 PDF

c# - Log4Net : "Could not load file or assembly ' log4net, 错误 Version=1.2.10.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一”