uCosIII中使用malloc函数
2015-07-14 21:56
281 查看
我在STM32F407核心板上的uCosIII操作系统中使用malloc时出现了一个奇怪的问题,程序第一次使用malloc时能够正常运行,第二次使用malloc函数时直接导致程序进入硬件故障异常死循环,实在不解,后询问高手才知要在启动文件中加大heap容量才行,后将heap容量加大后故障果然消失。
附加malloc的使用注意事项:
使用malloc函数申请内存空间需要了解:(malloc的原型为:(void *) malloc(int size) )
1)内存分配给谁?
2)分配多大的内存?
3)是否还有足够内存分配?
4)内存将用来存储什么格式的数据?
5)分配的内存在哪里?
举例:
char *p = (char *) malloc(1000);
在堆上分配了1000个字节的内存,返回这块内存的首地址,把地址强制转换成 char *类型后赋给char *类型的指针变量p;这块地址是用来保存char类型的数据。
使用malloc函数申请内存空间注意事项:
1)内存是否申请成功? if( NULL !=p )
2)使用结束后,一定要释放,要求malloc和free符合一夫一妻制;
3)内存释放后(使用free函数之后指针变量p本身保存的地址并没有改变),需要将p的值赋值为NULL(拴住野指针)。
char *p = (char *) malloc(1000);
if (NULL != p)
{
......
free(p);
p = NULL;
}
else
{
}
最后,malloc容易产生内存碎片,要注意使用!
附加malloc的使用注意事项:
使用malloc函数申请内存空间需要了解:(malloc的原型为:(void *) malloc(int size) )
1)内存分配给谁?
2)分配多大的内存?
3)是否还有足够内存分配?
4)内存将用来存储什么格式的数据?
5)分配的内存在哪里?
举例:
char *p = (char *) malloc(1000);
在堆上分配了1000个字节的内存,返回这块内存的首地址,把地址强制转换成 char *类型后赋给char *类型的指针变量p;这块地址是用来保存char类型的数据。
使用malloc函数申请内存空间注意事项:
1)内存是否申请成功? if( NULL !=p )
2)使用结束后,一定要释放,要求malloc和free符合一夫一妻制;
3)内存释放后(使用free函数之后指针变量p本身保存的地址并没有改变),需要将p的值赋值为NULL(拴住野指针)。
char *p = (char *) malloc(1000);
if (NULL != p)
{
......
free(p);
p = NULL;
}
else
{
}
最后,malloc容易产生内存碎片,要注意使用!
相关文章推荐
- 求矩阵中的最大二维矩阵
- [Erlang_Question32]ibrowse流程及性能测试
- 算法学习之一java实现堆排序
- centos下的压缩解压缩
- 二维码生成器
- myeclipse javaWeb项目+JAX-WS webService接口开发
- 【代码片段】混合布局
- ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
- ADT开发中的一些优化设置:代码自动补全等
- 欢迎使用CSDN-markdown编辑器
- Bellman-For判断负权回路
- 安卓在线开发文档
- Flash安全的一些总结
- Scala中的继承:超类的构造、重写字段、重写方法
- android开发步步为营之67:使用android开源项目android-async-http异步下载文件
- 抽象类与接口的区别
- 批量update代替游标
- TOJ 3852 Haitang1 三维树状数组
- SQL server
- mysql,mysqli和PDO的区别