gpt4 book ai didi

c - 嵌入式 c - 如何在程序崩溃时释放分配的内存

转载 作者:行者123 更新时间:2023-12-05 03:06:28 29 4
gpt4 key购买 nike

我正在嵌入式处理器上编写一个简单的裸机应用程序。作为此应用程序的一部分,它必须使用 malloc 在大约 256kB 的堆上分配一些内存。注意:最初这是在 main 中静态分配的,但在一定的大小限制下我们不得不转向动态分配(gcc 悄悄地失败了)。

问题是 - 当程序第一次运行时一切正常。但是,如果处理器在执行期间被重置,则 pc 将返回到开始,但程序内存仍然具有上次执行时的堆。所以下一次程序运行 malloc 失败(因为上次运行的 malloc 的分配表仍然存在并且它认为可用的堆空间已经分配)。

所以问题是——我如何确保每次运行时 malloc 的表在 main 开始时被清除?有没有一种方法可以使用堆的位置将一些内存归零(以清空表)或者访问 malloc 之前返回的指针列表以便我可以释放它们?

最佳答案

堆应该在预主初始化代码中设置。在裸机系统中,没有系统调用来为您的程序分配堆内存。您可以尝试让调试器从第一个加载的指令而不是 main 开始,并查看它在哪里设置堆。听起来您的系统需要在重置时重新加载程序以初始化堆。你用的是什么系统?

关于c - 嵌入式 c - 如何在程序崩溃时释放分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347417/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com