我在STM32F407核心板上的uCosIII操作系统中使用malloc时出现了一个奇怪的问题,程序第一次使用malloc时能够正常运行,第二次使用malloc函数时直接导致程序进入硬件故障异常死循环,实在不解,后询问高手才知要在启动文件中加大heap容量才行,后将heap容量加大后故障果然消失。
附加malloc的使用注意事项:
使用malloc函数申请内存空间需要了解:(malloc的原型为:(void *) malloc(int
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)
{
......
}
else
{
}
最后,malloc容易产生内存碎片,要注意使用!