内存填充越界 + malloc空间不够导致越界

【创建时间:2014-11-1 11:50】


[2014-10-31]:环境:系统:Linux版本:3.08    平台:Hisi3516c。

内存填充越界:

问题:

申请了一个2048字节局部静态的变量存储一个固定RGB值,方便后续画框、线时快速copy。但是在第一次赋固定值时,越界了,导致内核自动向应用程序 发送信号

       SIGBUS(7)给应用程序,导致应用程序异常退出。
	static char s_DefColor[2048] = {};
	static char s_fillflag = 1;
//错误代码:
	if(1 == s_fillflag)
	{
		int cycle =0;
		unsigned short color = 0xfc00;

		s_fillflag = 0;
		for(;cycle < 2048;cycle++)
		{
			memcpy(s_DefColor + (cycle <<1), &color,2);//由于每次移动两个字节,而循环了2048次,导致数据填充越界,
														//当cycle >= 1024时,填充的位置为位置区域,所以系统发送
								//SIGBUS(7)给应用程序,导致应用程序异常退出。
		}	
	}
//更正后的代码
	
	if(1 == s_fillflag)
	{
		int cycle =0;
		unsigned short color = 0xfc00;

		s_fillflag = 0;
		for(;cycle < 1024;cycle++)
		{
			memcpy(s_DefColor + (cycle <<1), &color,2);//由于每次移动两个字节,而循环了2048次,导致数据填充越界,
														//当cycle >= 1024时,填充的位置为位置区域,所以系统发送
								//SIGBUS(7)给应用程序,导致应用程序异常退出。
		}	
	}
	收获:
		1、在写程序时一定要打印出每次收到的系统信号值,方便快速定位到是什么问题导致程序崩溃。
		2、在使用指针时,一定要注意内存是否越界。
Malloc空间不够导致越界:
	问题:
		由于像素格式为ARG1555,所以每个像素点的颜色实际有两个字节的ARGB值确定。而我在填充的时候注意到了,但是在申请填充内存
		空间实际时却没有考虑到两字节,导致填充时越界,出现程序自动崩溃。
	收获:
		在处理一个问题时,一定要先了解清楚其原理,例如像素格式会影响决定每个像素点的颜色的字节数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值