我的c#调用了一个C++的动态链接库,c++要求传入的参数为指针,我在C#采用如下的分配非托管内存
IntPtr bm = Marshal.AllocHGlobal(20)分配20个byte的空间
调试的过程中,查看分配的内存内容为
0d f0 ad ba 0d f0 ad ba 0d f0 ad ba.........
我其实想要内存的内容为 00 00 00 00 00 00
请问,如何初始化AllocHGlobal分配的内存
另外,我另外一个程序中,释放AllocHGlobal分配的内存
Marshal.FreeHGlobal(bm)老是报错:
其原因可能是堆被破坏,这说明XXX.exe中或它所加载的DLL中有Bug.
求解?
------解决思路----------------------
0填充这个可以使用ZeroMemory api,或者Marshal.Write/Copy之类,或者unsafe直接写内存。
堆被破坏这要不然是c#这边分配的内存不够大,要不然是c++那边有bug,写到了分配的空间之外。