tcpclient例程发现一个不大不小的BUG
在STM32F107下搭建了RTT的测试环境,PC端搭建一个服务器,将tcpclient.c加入到工程里编译后在fish里面执行,在服务器程序里面发送数据,然后服务器程序会收到STM32F107的应答数据,小数据都没问题,但是当发送数据超过1024的时候,此时再发送q退出的时候,会报(mem->magic == HEAP_MAGIC) assert failed at rt_free:497 的assert,原因是在释放内存的时候出现数据越界,仔细看代码发现前面rt_malloc(1024),一共申请了1024空间的内存,recv(sock, recv_data, 1024, 0)每次接收数据最大1024,这都没问题,但是下面的语句recv_data = '\0';就有可能造成内存越界,bytes_received的值超过1023的时候就会造成越界。这个BUG不属于内核系统里的,系统里的BUG俺估计也查不出来,哈哈,在这里发现一个小BUG,希望对后面的学习者有帮助,呵呵!
修改方法就是把recv(sock, recv_data, 1024, 0)改成recv(sock, recv_data, 1023, 0),相信大家都了然吧! 是的,这个是一个bug,谢谢反馈。
另外,印象中examples tcp例程还有个断开连接的bug,找个时间一并修复了。 想学习,大侠们快点完善。。。。 呵呵,本人程序就是借鉴例程修改的. 慢慢更新就可以了 呵呵,发现这个bug不容易啊。谢谢分享经验 谢谢分享,学习了 ffxz 发表于 2011-8-30 23:49 static/image/common/back.gif
是的,这个是一个bug,谢谢反馈。
另外,印象中examples tcp例程还有个断开连接的bug,找个时间一并修复了 ...
可是目前都还没有修复。
嘿嘿,要言出必行哦,我觉得BUG的修复是及时的,不应该是“找个时间一并修复了 ...”。{:tongue:}
页:
[1]