首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#调用空闲的本机c++内存

C#调用空闲的本机c++内存
EN

Stack Overflow用户
提问于 2013-11-29 22:14:01
回答 2查看 651关注 0票数 1

如果我有一个返回char*的c++函数,如下所示:

代码语言:javascript
复制
char *cctalk_app_event_name(DG_CCTALK_APP_EVT_CODE);

以及相应的C#签名:

代码语言:javascript
复制
[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);

如果本机代码返回一个用新关键字分配的char*,那么每次调用这个函数C#时,我肯定会有一个内存泄漏。有什么办法让我释放记忆吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-29 22:52:11

通过查看函数名,我的预感是,这很可能是将指针返回到DLL中的字符串常量,在这种情况下,您不需要担心释放指针。

如果SDK手册(链接在这里)没有任何用处,那么我将拆解DLL并查看该函数做了什么,但是在确定需要之前,不要担心如何删除它。

票数 2
EN

Stack Overflow用户

发布于 2013-11-29 22:53:41

如果您没有任何文档或源,那么您就无法知道内存是否分配给了new。如果它是用new分配的,那么需要用delete解除它的分配。这只能从本机代码中执行。如果需要这样做,则DLL将需要为您导出一个代理程序。

其他可能性包括来自共享堆的分配,例如COM堆。不太可能。或者,字符串是静态分配的,不需要取消分配。当函数返回C字符串作为返回值时,通常是这样的。如果你不得不猜的话,那就是百分比选项。在任何情况下,如果您无法释放字符串,您还能做什么?

唯一可以确定的方法是获得文档、源代码或作者的支持。我感谢你想知道解决办法,但你唯一的希望是这一段第一句所列的选择。

我很难相信这个复杂的图书馆没有文档。你是怎么经过这个图书馆的?你真的确定没有文档吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20294036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档