今天调试工程的时候,发现malloc分配失败,看了一下自己得堆空间绝对充足
可以看到.s启动文件中我的堆大小4K,对于自己分配的空间绝对够用
遇到的问题,没有发生handfault error,只是不能开辟空间了,整得一度怀疑片子的问题
在调试过程中,前两次开辟空间均正常,第三次开辟空间失败
最终找到问题,因为自己写代码太粗心,看官能发现下面的错误吗?
recv_queue_t* new_node = (recv_queue_t*) malloc(sizeof(recv_queue_t));
if(new_node == NULL)
{
return 0;
}
new_node->recv_data = (uint8_t*)malloc(sizeof(len+1));
if(new_node->recv_data == NULL)
{
return 0;
}
对头,就是使用了sizeof(len+1),这个开辟的空间只有4个字节的大小,后面访问时,越界了。(为啥没跑飞,可能是RAM足够大吧,猜测,希望有大佬可以指点一二),单步调试,就是无法开辟空间
修改:
recv_queue_t* new_node = (recv_queue_t*) malloc(sizeof(recv_queue_t));
if(new_node == NULL)
{
return 0;
}
new_node->recv_data = (uint8_t*)malloc((len+1));
if(new_node->recv_data == NULL)
{
return 0;
}
粗心的踩坑经历,记录一下,希望帮助到后来的人。。。。。