当前位置: 代码迷 >> C# >> c#非托管内存的初始化和释放的有关问题
  详细解决方案

c#非托管内存的初始化和释放的有关问题

热度:64   发布时间:2016-05-05 04:54:54.0
c#非托管内存的初始化和释放的问题
我的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,写到了分配的空间之外。
  相关解决方案