本次在实际测试情况下,发现程序无缘无故的异常,导致看门狗超时复位,经过排查是malloc函数分配失败的时候,依然对指针进行了操作,导致异常。以前没重视这个问题是因为,总觉的malloc基本都会成功的,假如循环调用一个函数logOutput,里面有malloc和free,那么下次调用logOutput分配相同的空间应该也是成功的(实际上非我所愿)。问题函数如下,必须对pBuffer没有分配成功做处理,否则很容易出问题。

static inline void logOutput(uint32_t level, const char *tag, const char* format, ...)
{
va_list va;
int len, len2,space;
char* pBuffer;
pBuffer = (char*)malloc(512);
/*space "\n\0"*/
if(pBuffer == NULL)
return;
space = gLogBufferLength - ;
len = utils_snprintf(pBuffer, LOG_PREFIX_SIZE_MAX, "#%s,%d:", tag,level);
utils_snprintf( pBuffer, LOG_PREFIX_SIZE_MAX, "#%s,%d:", tag,level);
space -= len;
va_start(va, format);
len2 = utils_vsnprintf( pBuffer+len, space ,format, va);
va_end(va);
len += (len2>?len2:space); if(len < gLogBufferLength - ){
pBuffer[len] = '\n';
pBuffer[len+] = '\0';
}else{
pBuffer[gLogBufferLength - ] = '.';
pBuffer[gLogBufferLength - ] = '.';
pBuffer[gLogBufferLength - ] = '?';
pBuffer[gLogBufferLength - ] = '\n';
pBuffer[gLogBufferLength - ] = '\0';
} logwrite((uint8_t*)pBuffer,utils_strlen(pBuffer));
free(pBuffer);
};

malloc函数分配失败处理的严重性的更多相关文章

  1. malloc函数分配内存失败的常见原因

    malloc()函数分配内存失败的常见原因:  1. 内存不足.  2. 在前面的程序中出现了内存的越界访问,导致malloc()分配函数所涉及的一些信息被破坏.下次再使用malloc()函数申请内存 ...

  2. 在内存充足时malloc函数分配内存失败的原因及解决

    昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏.在这个思想的指导下,今天又是郁闷 ...

  3. 对于c语言存储分配程序(malloc函数)实现的理解

    内容主要出自<The C Programming Language>一书,不得不说这是一本程序员必读的书,我大二读了前面几章就扔到一边了,直到最近才又拿起来再读,找不到言语来形容我现在后悔 ...

  4. malloc()函数(Linux程序员手册)及函数的正确使用【转】

    转自:https://blog.csdn.net/david_xtd/article/details/7311204 名称 malloc,free,calloc,realloc--分配和释放动态内存 ...

  5. malloc函数用法

    malloc函数用法 函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型.void* ...

  6. 内存分配malloc函数注意事项。

    malloc的全称是memory allocation,中文叫动态内存分配,用于向系统申请分配指定字节的内存空间 原型:extern void *malloc(unsigned int num_byt ...

  7. malloc分配失败的两个现象

    在实际代码中,malloc的反复分配释放,可能会导致某一次malloc分配失败,虽然上一次调用malloc分配成功(然后释放),下一次在相同地方调用malloc分配可能会失败,疑问在于,既然上一次分配 ...

  8. 使用malloc函数或new运算符为链表结点分配内存空间

    目录 使用malloc函数或new运算符为链表结点分配内存空间 使用malloc函数或new运算符为链表结点分配内存空间 当我们定义链表结点类型后,如何在每次需要使用新结点时临时分配相应大小的内存空间 ...

  9. malloc函数和其他内存分配函数

    1. 需要包含头文件:#i nclude 或 #i nclude 函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间 ...

随机推荐

  1. 【BZOJ3784】树上路径

    题目大意 给定一个\(N\)个结点的树,结点用正整数\(1..N\)编号.每条边有一个正整数权值.用\(d(a,b)\)表示从结点\(a\)到结点\(b\)路边上经过边的权值.其中要求\(a < ...

  2. Windows XP和Wndows7误删除了注册表下.exe文件夹之修复办法

    在桌面空白处鼠标右击选择“新建-文本文档”,然后将下面的代码复制粘贴进去;如图所示: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\. ...

  3. FreeImage.lib库的配置和简单使用 转

    转载地址 http://www.codeweblog.com/win8-1%E4%B8%8Bfreeimage-lib%E5%BA%93%E7%9A%84%E9%85%8D%E7%BD%AE%E5%9 ...

  4. Asset Store 下载的package存在什么地方?

    发现从Asset store下载的packages都不知道放在了什么地方 Windows 7,C:\Users\<username>\AppData\Roaming\Unity\Asset ...

  5. JavaScript:直接写入 HTML 输出流

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  6. Openresty最佳案例 | 第5篇:http和C_json模块

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616672 本文出自方志朋的博客 http客户端 Openresty没有提供默认的Htt ...

  7. 【C语言】素数判定

    题目:素数判定. 编写函数,参数是一个正整数n,如果它是素数,返回1,否则返回0. 分析 质数概念: 质数:除了1之外,只能被它本身整除的正数称为质数 如果这个数能被其他正数整除,说明这个数有两个或以 ...

  8. BZOJ1432: [ZJOI2009]Function(找规律)

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1523  Solved: 1128[Submit][Status][Discuss] Descriptio ...

  9. jdbc学习笔记03

    作业: 1. 学生表(id,age,name) 2. 插入学生 3. 修改学生 4. 删除学生 5. 查询学生 JavaBean 俗称简单的Java对象 javaBean满足以下三点 1.私有属性 2 ...

  10. 关于mysql8.0.11版本在win10安装

    新的mysql版本没有.exe文件一键安装,网上找了教程,自己搞了下 首先是在菜鸟教程 http://www.runoob.com/mysql/mysql-install.html 根据它的提示下载w ...