你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32+IAR中malloc的使用

[复制链接]
thinkcode 发布时间:2015-3-30 15:05
测试环境:STM32+IAR6.4
堆区大小设置为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");
  }
  p2为NULL,使用时会出错。
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。

如有错误,欢迎指正,欢迎拍砖!
收藏 2 评论7 发布时间:2015-3-30 15:05

举报

7个回答
damiaa 回答时间:2015-3-30 16:12:00
那肯定的。老申请不释放那就用完了。
肖久 回答时间:2015-3-30 16:59:44
不错 不错  
木木鱼 回答时间:2015-3-31 09:06:39
谢谢分享!
stary666 回答时间:2015-3-31 09:29:54
谢谢分享!
小虾丁 回答时间:2017-1-11 09:59:01
请教一个问题,设定堆区的大小后,系统启动的时候不需要作跟堆相关的初始化,就可以调用malloc()函数来分配动态内存吗?
andypanfan 回答时间:2017-1-12 09:18:51
谢谢分享!
ljt8015 回答时间:2018-8-17 20:28:48
直接使用系统malloc会有内存碎片吧?

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版