bieahoff 发表于 2011-8-30 15:27:18

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),相信大家都了然吧!

ffxz 发表于 2011-8-30 23:49:42

是的,这个是一个bug,谢谢反馈。

另外,印象中examples tcp例程还有个断开连接的bug,找个时间一并修复了。

qqwuying2 发表于 2011-9-20 09:58:12

想学习,大侠们快点完善。。。。

chexing 发表于 2011-10-15 15:44:49

呵呵,本人程序就是借鉴例程修改的. 慢慢更新就可以了

zx2592 发表于 2012-5-18 17:02:22

呵呵,发现这个bug不容易啊。谢谢分享经验

fenglove 发表于 2012-6-7 16:03:59

谢谢分享,学习了

geniuscode 发表于 2012-6-14 15:45:12

ffxz 发表于 2011-8-30 23:49 static/image/common/back.gif
是的,这个是一个bug,谢谢反馈。

另外,印象中examples tcp例程还有个断开连接的bug,找个时间一并修复了 ...

可是目前都还没有修复。
嘿嘿,要言出必行哦,我觉得BUG的修复是及时的,不应该是“找个时间一并修复了 ...”。{:tongue:}
页: [1]
查看完整版本: tcpclient例程发现一个不大不小的BUG