测试环境:STM32+IAR6.4
堆区大小设置为0x1000(默认值)。
变量定义:
char *p=NULL;
char *p2=NULL;
1. 申请内存大小超过设置值
p = (char *)malloc(sizeof(char)*5090);
malloc返回NULL,使用这段内存是会出错(硬件错误)。
申请内存,使用完毕后要释放。
IAR设置堆栈大小 option->Linker -> Config -> Override default ->Edit。
堆区大小设置为0x1000(默认值)。
变量定义:
char *p=NULL;
char *p2=NULL;
1. 申请内存大小超过设置值
p = (char *)malloc(sizeof(char)*5090);
malloc返回NULL,使用这段内存是会出错(硬件错误)。
2.申请两段内存,每段不超过设定值,但总和超过设定值。
p = (char *)malloc(sizeof(char)*3090);
if(p== NULL)
{
printf("malloc error1\r\n");
}
p2 = (char *)malloc(sizeof(char)*3090);
if(p2== NULL)
{
printf("malloc error2\r\n");
}
3.申请一段内存,使用完毕后释放掉,然后再申请一段内存
p = (char *)malloc(sizeof(char)*3090);
if(p== NULL)
{
printf("malloc error1\r\n");
}
...
free(p);
p2 = (char *)malloc(sizeof(char)*3090);
if(p2== NULL)
{
printf("malloc error2\r\n");
}
...
free(p2);
使用正常。
申请内存,使用完毕后要释放。
IAR设置堆栈大小 option->Linker -> Config -> Override default ->Edit。