WinCE5.0 运行异常提示:0x80000002解决过程

简介:

场景

    将代码移植到Wince5.0系统上,芯片框架是mips,之前的代码在x86和arm等架构上运行正常。显示bmp位图的时候会弹出窗口提示:异常:0x80000002错误提示


步骤

1)

    通过VS错误查询工具得到的结果是:内存已经用完,实际上还有内存可以申请

2)

    尝试加载小图片,无效

3)

    不加载图片,成功显示

4)

    尝试在其他的地方可以申请到8MB的内存

5)

    通过日志输出,定位到bmp位图的结构体赋值的过程中,出现错误,初步怀疑是栈溢出,但是如果省去不调用,还是可以执行成功的

6)

    百度过程中,发现该错误提示还有一层含义:

程序读取一个未经对齐的数据时引发的异常 EXCEPTION_DATATYPE_MISALIGNMENT 属于硬件异常

7)

    原来bmp位图的结构体的头部是一个14个字节的结构体,里面的变量并没有进行字节的对齐,属于非对齐的地址访问,所以有些不对齐的b变量不能够直接访问,需要将数据通过memcpy逐个字节拷贝出来,然后拼凑成完整的属性。

  //在mips架构下不支持非对齐数据访问,bmp位图头部是14个字节,不符合4个字节对齐访问,因此采用字节拷贝的方式进行访问

  int offsetWidth = (int)&((PBITMAPINFOHEADER)0)->biWidth;

  memcpy(&(dest->m_width), offset + offsetWidth, sizeof(LONG));

  int offsetHeight = (int)&((PBITMAPINFOHEADER)0)->biHeight;

  memcpy(&(dest->m_height), offset + offsetHeight, sizeof(LONG));






    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1880092,如需转载请自行联系原作者


相关文章
|
5月前
|
iOS开发 开发者
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
|
存储 测试技术
kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
563 0
|
运维 安全 Linux
新手必会的Linux常用系统状态检测命令
last命令用于查看所有系统的登录记录,格式为“last [参数]” 使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!
300 0
新手必会的Linux常用系统状态检测命令
DeepStream运行范例出错,提示缺少libnvinfer.so怎么办?
DeepStream运行范例出错,提示缺少libnvinfer.so怎么办?
421 0
|
安全 IDE 开发工具
VS2010调试X64项目工程时,报错提示VS调试监视器(MSVSMON.EXE)未能启动,解决方案。
VS2010调试X64项目工程时,报错提示VS调试监视器(MSVSMON.EXE)未能启动,解决方案。
544 0
|
程序员 C语言
Win知识 - 程序是怎样跑起来的——了解程序运行方式的必要性
Win知识 - 程序是怎样跑起来的——了解程序运行方式的必要性
155 0
Win知识 - 程序是怎样跑起来的——了解程序运行方式的必要性

热门文章

最新文章