我一直在我們的應用程序之一調試堆腐敗異常。它剛開始發生在上個月(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