今天调试代码中,遇到了一个比较奇怪的打印,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