问题描述
有个问题比较困惑,非托管c++中有如下代码;INF_APPboolGetTestDateTime(char**TestDateTime){charsource[100]="ceshishuzhu";char*pstr=newchar[100];memcpy_s(pstr,100,source,100);*TestDateTime=pstr;returntrue;}在C#中调用方式如下:[DllImport("InfParser.dll",EntryPoint="GetTestDateTime",CallingConvention=CallingConvention.Cdecl)]publicstaticexternboolGetTestDateTime(refIntPtrTestDateTime);Stringtesttime=string.Empty;IntPtrptr=newIntPtr();boolbRet=NativeMethod.GetTestDateTime(refptr);testtime=Marshal.PtrToStringAnsi(ptr);程序运行,没问题,可是c++函数中new的内存没有机会去释放,会有内存泄漏。请问这种情况如何释放那个临时分配的内存呢?
解决方案
解决方案二:
这么写,那c++里也必须有释放的函数啊
解决方案三:
你应该去问写这个c++代码的人,问问他到底有没有这个考虑。在.net中扯不上“释放非托管代码”的职责问题,完全是你引用的dll的开发者必须自己负责的事情。而且这个“释放”也绝非什么简单方便就能做到的,需要在c++代码中一点点“细抠”无遗漏地去单独编码。因此你在一个.net程序中,纠结这个是完全不应该的。
解决方案四:
谁申请谁释放用dispose模式,C++再定义一个方法,里面写delete,然后C#的dispose方法去调用