C# Marshal.FreeHGlobal() 爆异常:堆已损坏

weixin_38051598 2017-08-26 02:46:16
        public static byte[] StructToBytes(object structObj)
        {
            int size = Marshal.SizeOf<object>(structObj);
            byte[] bytes = new byte[size];
            IntPtr buffer = Marshal.AllocHGlobal(size);

            try
            {
                Marshal.StructureToPtr<object>(structObj, buffer, false);
                Marshal.Copy(buffer, bytes, 0, size);
            }
            catch(OutOfMemoryException ex)
            {
                MsgNotification.PopErrorInfo("StructToBytes error:" + ex.Message);
            }
            catch(ArgumentNullException ex)
            {
                MsgNotification.PopErrorInfo("StructToBytes error:" + ex.Message);
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }

            return bytes;
        }

UWP开发使用C#语言 上面的函数跑在Debug模式下非常稳定, 百测不爆
然而切换到Release模式下之后调用即爆.. 
0x76FE9AAA (ntdll.dll) (hkEncrypt.exe 中)处有未经处理的异常: 0xC0000374: 堆已损坏。 (参数: 0x770258E8)。
同样的函数为什么在Debug模式下没问题到了Release之后就无法正常使用了呢?
这个问题该如何解决呢?
...全文
284 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38065656 2017-08-26
  • 打赏
  • 举报
回复
通常0x76FE9AAA (ntdll.dll)汞种讯息的出现,都跟系统档案损毁有很大的关系,在debug模式下,它依附的是在VS底下的的环境,在底层的运作有点不同。0x76FE9AAA
(ntdll.dll)的讯息有几种可能:1.系统档案捐毁。2.硬碟出现异常。建议可以先行修复系统中的一些错误。或者尝试把你编译过的程式,用一台正常运作的电脑执行看看。
weixin_38053353 2017-08-26
  • 打赏
  • 举报
回复
通常0x76FE9AAA (ntdll.dll)汞种讯息的出现,都跟系统档案损毁有很大的关系,在debug模式下,它依附的是在VS底下的的环境,在底层的运作有点不同。0x76FE9AAA
(ntdll.dll)的讯息有几种可能:1.系统档案捐毁。2.硬碟出现异常。建议可以先行修复系统中的一些错误。或者尝试把你编译过的程式,用一台正常运作的电脑执行看看。

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧