您的位置:首页 > 其它

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

2014-11-01 12:23 267 查看
【创建时间: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值确定。而我在填充的时候注意到了,但是在申请填充内存
空间实际时却没有考虑到两字节,导致填充时越界,出现程序自动崩溃。
收获:
在处理一个问题时,一定要先了解清楚其原理,例如像素格式会影响决定每个像素点的颜色的字节数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐