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

2024-06-24 06:18

本文主要是介绍内存填充越界 + 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空间不够导致越界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089396

相关文章

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd