我参照网络上的代码写的一个UDP IOCP封装,现在发现的问题是在debug模式下好像比较正常,但在release模式下会错误,错误信息为:0x00000010指令引起的0x00000010内存。该内存不能为read。然后测试了网络上能够找到的代码,似乎都存在此问题。   我是在本机测试,使用SocketTool软件作为udp客户端向上面的程序发送大量的udp包,程序即崩溃。在virtual pc中运行SocketTool软件测试也存在同样的问题。
   小弟功力不够,几天了都没有找出此bug(可能是release模式下编译器优化或更深层次的原因引起),希望大虾帮我看看程序,救救小弟,指出此代码或设计存在的问题,小弟在此万分感激。同时代码也完全开放,希望对用得着的朋友有所帮助。代码及测试工具下载:
http://file5.brsbox.com/download.php?sid=b8d11526a7754c548bfd5315de018e99&fc=2593c57b450324308d873eef5c571840/%B4%FA%C2%EB%BC%B0%B9%A4%BE%DF.rar

解决方案 »

  1.   

    既然你自己不能找出来就要通过调试让Windows帮助你把bug找出来
    让release输出调试信息
    写个crash report,收集错误报告信息,然后用VC来调试这个错误报告文件即可
    自己查MiniDumpWriteDump这个API的用法
      

  2.   

    谢谢楼上的大哥。我打算重新写整个框架,这两天在研究SDK 中的iocp例子,可能在一些理解上还存在问题,过段时间再向大家汇报。
      

  3.   

    调试了一下
    有时很正常,单机调试,socket收发太快了
    连发10W次,128个pContent都用不完
    有时就报错在WSASend后栈里pContent被破坏
    IssueSendOperate
    另外这个pContent栈实现的有点问题建议:
    内存池用链表,而不是用栈
      

  4.   


    非常谢谢stjay,非常谢谢看了我写得比较拙劣的代码。我调试发现也是堆栈被破坏,但就是找不到根源。谢谢你的建议,我把内存池这一块修改一下再测试。为了谢谢大家,再共享另外一个UDP IOCP封装代码,但内存池的实现思想有所区别,我的理解是后面一种吞吐量会受到限制,不知道对不对,还请大虾给小弟指点一下。(测试工具同前)
    http://www.brsbox.com/filebox/uploadcomplete/randstr/1942586mwKn17Ds1251YpL583o/fgid/c68749c9f7287bb74be109a9ea7a3063/dirids/
      

  5.   

       接上面的帖子。因为我是tcp和udp一起设计的,里面的数据结构是相同的,目前测试来看,tcp iocp server测试还没有发现崩溃的问题,但udp iocp server问题同上。老版tcp server及udp server下载页面:http://download.csdn.net/source/1101107。(上面需要积分),最新版本的地址见:http://download.csdn.net/source/1666595
      

  6.   

    还是设计的问题,重新设计编码后问题消失。  :),此次设计我将把tcp 和 udp整合到一起,代码完成后我将上传到我的空间,有需要的兄弟可以前去下载。
      

  7.   

    TCP与UDP的IOCP实现已经整合,一直困扰的问题同时也解决,优化了内存池实现,较上一版本有很大提高,需要的兄弟留下邮箱。
      

  8.   

    正学习 IOCP,谢谢m__point
    [email protected]
      

  9.   

    你好~不知道是否可以发一份 UDP IOCP 的代码给我~~谢谢[email protected]