C#学习系列之报错解决一

C#学习系列之报错解决一


问题

项目代码合并,分块排查,找到问题源头,解决问题。
具体报错:

  • 0x77792EAB wpfgfx_v400.dll 0xc0000005:写入位置0x43160004时发生访问冲突。
  • 0x775E2A5D ntdll.dll 0xc0000005:读取位置0x000000014时发生访问冲突。
  • Critical error detected c0000374 执行断点指令(_debugbreak()语句或类似调用)

提示:以下解决办法可供参考

C#指针

在C#中是没有指针的,但是使用动态链接库,调用C++程序,难免会使用到指针。于是,使用IntPtr来对应指针。这里就涉及到开辟指针的空间。

IntPtr dataArrayPtr = Marshal.AllocCoTaskMem(144);
byte* bp_save = (byte*)Marshal.AllocHGlobal(0xFFFF);

byte*可强制转化为IntPtr

C#指针使用注意事项

回到开始问题。
报错。
在很久之前,解决ffpemg解码,开辟过指针内存,使用byte*时,常在循环语句中,不断开辟内存,导致某项目运行一直处于卡断。于是在循环语句外定义指针,不做循环开辟内存操作。
循环外:

byte* bp_save = (byte*)Marshal.AllocHGlobal(0xFFFF);
byte* bp;

循环内:

Marshal.Copy(buf, 0, (IntPtr)bp_save, dataLenth);//取到指针后,赋值
bp = bp_save;

用比较笨的办法解决了。

这次报错,通过模块排查,问题大致相同,在循环中反复开辟内存块。将IntPtr定义循环外,问题解决!


总结

提示:不要在循环中多次开辟指针的内存

byte*IntPtr在循坏外开辟!!!

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值