我一直在我们的应用程序之一调试堆腐败异常。它刚开始发生在上个月(2015年3月),代码没有改变。 windbg将其缩小为一些代码,我们正在使用pinvoke从c#调用zlib函数。csharp zlib zlibversion pinvoke导致随机崩溃(堆损坏)
的代码片段是:
public class Info
{
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern string zlibVersion();
public static string Version { get { return zlibVersion(); } }
}
它看起来像这样的代码是从zlib.net源\的contrib \ dotzlib \ DotZLib \ DotZlib.cs其是dotnet的包装器ZLIB.DLL。
问题:任何想法为什么这会导致堆腐败? dotnet pinvoke有问题吗?我想很多其他应用程序可能会使用这个相同的包装。然而,我并没有发现其他人在互联网上抱怨这一点。
编辑1 - 下面是从zlib的源(zlib.h)的非托管接口:
ZEXTERN const char * ZEXPORT zlibVersion OF((void));
现在什么都ZEXTERN,ZEXPORT和的定义是什么? – 2015-04-01 19:32:43