我是靠谱客的博主 怡然鸡,最近开发中收集的这篇文章主要介绍KEIL使用malloc函数申请堆空间失败的解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考链接:keil 下 malloc的使用
1、工程内需要包含头文件<stdlib.h>,malloc位于该头文件内
2、工程配置勾选使用微库Target-Use MicroLIB

特别声明:
一般来说以上两个步骤就可以正常使用malloc函数申请堆空间了,但前提是申请的堆空间不能超过启动文件中规定的堆空间大小(Heap_Size),以下用STM32F103ZET6的启动文件说明:

variables = (int32_t *) malloc(=0x3F4); //1014字节

程序中申请1014个字节堆空间,按道理说是可以成功返回一个具体的地址的,但是程序却返回为0的地址,说明堆空间没有申请成功,通过查看startup_stm32f10x_hd.s文件,摘选如下:

Heap_Size       EQU     0x00000200 ;注意:这里定义了最大堆空间为512字节

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

                PRESERVE8
                THUMB

因为Heap_Size=512字节,当程序需要申请超过512字节的堆空间时,自然无法成功,所以只要在启动文件中将Heap_Size值适当增大,即可解决该问题!
修改如下:

Heap_Size       EQU     0x00000C00 ;定义3K大小的堆空间

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

                PRESERVE8
                THUMB

最后

以上就是怡然鸡为你收集整理的KEIL使用malloc函数申请堆空间失败的解决方法的全部内容,希望文章能够帮你解决KEIL使用malloc函数申请堆空间失败的解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部