KEIL MDK使用malloc申请堆空间注意事项

本文记录了在STM32项目中遇到的KEIL MDK使用malloc分配内存超过堆空间限制但未报错的问题。内容包括问题描述、原因分析以及解决方案。在KEIL MDK中,编译器不会检查malloc分配是否超出堆大小,而是需要开发者在代码逻辑中进行判断和处理。当malloc失败时,返回0,因此需检查返回值来确保分配成功。
摘要由CSDN通过智能技术生成

项目场景:

最近有个案子(MCU:STM32F103VCT6)需要定制个小功能,需要用malloc分配大量的空间。本来是没什么,但是无意中发现,KEIL MDK编译时,malloc分配的空间已经超过预设的大小也不报错。后面发现和自己的使用也有关系。在这边记录一下,给有碰到类似问题的网友们一些参考。


问题描述:

先看启动文件。这里堆分配的大小是0x2000,即8K。

Heap_Size       EQU     0x00002000
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

在代码里,我创建了一个uint16的数组,数量是4500。所以大小是9000,已经溢出了。

U8 TagGet(void)
{
   
	U8 statue=FALSE;
	U16 *pbuf;
	U16 cnt,i,j;
	U16 const len = 4500;
	
	pbuf = (U16 *)malloc(sizeof(U16)*len
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值