记一次,stm32 中malloc失败,程序还正常运行,粗心的错误

今天调试工程的时候,发现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;
	}

粗心的踩坑经历,记录一下,希望帮助到后来的人。。。。。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值