博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中静态申请内存遇到的错误分析
阅读量:5334 次
发布时间:2019-06-15

本文共 1107 字,大约阅读时间需要 3 分钟。

  今天调试代码中,遇到了一个比较奇怪的打印,dump出来的数据只有前四位有值,其他后面的都为零。

出于直觉,应该是内存没有申请到。仔细核对代码之后,果真发现了一个语法错误,就是使用指针的指针时

,对申请到的内存取址错误,函数如下:

  void buff_alloc_check(unsigned char **buff, unsigned int len)

使用方法:

        unsigned char *ibuff = NULL;

        buff_alloc_check(ibuff,ilen);
奇怪的是,系统针对这个并没有报错,后来分析ARM系统发现,这个小系统的检查有关系,我所用的小系统没有

此项检查。

  在Linux上写了一个验证程序,发现是编译不过的。说明不同的系统对编译语法的检查是不一样的。在这里,

暴露了自身在基础上的薄弱,C语言基础仍旧不够好,这个以后要多加;练习。

  为了防止再犯类似的错误,我就在Linux上重新实现了一遍,这样加深理解吧。

#include 
#include
#include
#define BUFF_SIZE 2048static unsigned char iarray[BUFF_SIZE];unsigned int ibuff_used = 0;unsigned int buff_alloc_free(){ return BUFF_SIZE - ibuff_used;}void buff_alloc_check(unsigned char **buff, unsigned int len){ if(len > buff_alloc_free()) { printf("alloc fialed len:%d freed:%d\n\t",len,buff_alloc_free()); assert(len > buff_alloc_free()); } *buff = iarray + ibuff_used; ibuff_used += len;}void HexDump(char *buf,int len,int addr){ int i,j,k; char binstr[80]; for (i=0;i

 

转载于:https://www.cnblogs.com/dylancao/p/7932173.html

你可能感兴趣的文章
jmeter(二十一)JMeter 命令行(非GUI)
查看>>
静态成员与实例成员
查看>>
mysql 占用的内存大小
查看>>
接口隔离原则
查看>>
开源协议
查看>>
mysql 数据类型转换
查看>>
Html5标签一览
查看>>
html---心得4
查看>>
【AtCoder】ARC103
查看>>
cocos2d 粒子效果以及Particle Designer粒子工具的学习
查看>>
mysql 索引原理
查看>>
MySQL显示中文
查看>>
codevs 1378 选课
查看>>
python os.walk/os.listdir/os.path.walk 区别
查看>>
TCP协议三次握手过程分析
查看>>
bzoj 1925: [Sdoi2010]地精部落
查看>>
九度 1537:买卖股票(区间DP)
查看>>
(转)LR性能测试结果样例分析
查看>>
分页存储管理和分段存储管理
查看>>
【BZOJ 2839】 2839: 集合计数 (容斥原理)
查看>>