Page 1 of 1

[已解决] assert failed: heap_caps_free, and panic

Posted: Wed Jul 20, 2022 4:04 am
by gingerologist
我的应用启动后总是遇到相似的错误,然后发生重启,不知道怎么debug。因为这个错误我重新安装了esp-idf, 4.4.x版本。但没能消除错误。同样的代码几个月之前是工作的。我想问一下可能是什么原因?

每次不完全一样但是经常看到这句:

assert failed: heap_caps_free heap_caps.c:339 (heap != NULL && "free() target pointer is outside heap areas")
Screenshot from 2022-07-20 11-57-54.png
Screenshot from 2022-07-20 11-57-54.png (254.24 KiB) Viewed 4433 times

Re: assert failed: heap_caps_free, and panic

Posted: Wed Jul 20, 2022 6:46 am
by ESP_Gargamel
free 的地址不对了,一种可能是你哪个任务的 stack 太小了。

Re: assert failed: heap_caps_free, and panic

Posted: Wed Jul 20, 2022 12:17 pm
by gingerologist
谢谢你的建议,我增加了stack,拿掉了所有malloc/free代码,之后看到确实是可以工作的。

我现在缩小了问题范围;我发现只要我在一个任务里malloc过内存,即使立刻free,什么也不做;最终也会引起(另一个任务里)esp_http_client发生错误,有时候是在open时,有时候时cleanup时;都和堆内存相关。

是直接用malloc/free不行吗?需要用特别的malloc/free函数?还是需要什么配置?

Re: assert failed: heap_caps_free, and panic

Posted: Wed Jul 20, 2022 12:26 pm
by gingerologist
ESP_Gargamel wrote:
Wed Jul 20, 2022 6:46 am
free 的地址不对了,一种可能是你哪个任务的 stack 太小了。
最终我找到了问题,和esp-idf无关,是我自己的代码在switch之后又free了一次内存,free了两次所以错了。I am stupid。谢谢你的建议。