本文主要是介绍内存填充越界 + 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值确定。而我在填充的时候注意到了,但是在申请填充内存
空间实际时却没有考虑到两字节,导致填充时越界,出现程序自动崩溃。
收获:
在处理一个问题时,一定要先了解清楚其原理,例如像素格式会影响决定每个像素点的颜色的字节数。
这篇关于内存填充越界 + malloc空间不够导致越界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!