Win32 TCP,
一个监听线程,
当一个用户连上来时需要为他new一个结构,
就这么简单。OutputDebugString("Before new \r\n");
    
     try{
     S* p = new S;
     }catch(...){
         return;
     }OutputDebugString("After new \r\n");每次跑个几十分钟就挂,在DebugView中看见没能出"After new".
很明显new挂了在Debug或者Release中用VS Excute没问题,把Release程序拿出来直接跑,就不行绝对不会是内存不够 ,可能是有泄露,但系统才用了200M PF , 当然还有其他线程,我想有冲突也不会影响到我new一个新的不相干的东西吧?请高手帮我分析!非常感谢。有没有更好的Debug手段。我就奇怪我catch了为什么还是出错....

解决方案 »

  1.   

    贴出class S的结构和构造函数
      

  2.   

    new 出来的东西有没有delete?
      

  3.   

    是不是在测试时不断接受新的连接,是多大规模的一个数量,不断new而不释放终究会导致可用内存耗尽,而且new有时也会失败的,你把代码贴得完整一点也许更能看出问题来
      

  4.   

    你是不是用AcceptEx函数来接收SOCKET的??
    这个函数使用不当,会使内存分配new失败。
      

  5.   

    是普通accept
    大概3000到5000个连接,
    不是class是struct,
    我new后保存了指针,应该不是泄露吧!
    任务管理器看也才用了30M左右吧!
      

  6.   

    太频繁的new,delete就有可能new不成功
      

  7.   

    我都没delete ......
    就算new不成功也不该出错啊。
    我new后马上就判断了p是不是0出的错是“对空指针的访问(对0地址的访问)”
    奇怪的是DebugView停在了Before new后面 , After new前面!!
      

  8.   

    new了之后记得delete,估计会跑的时间长一点
      

  9.   

    顶!
    new是要系统内存耗尽才失败吧。
    即便失败,我也应该捕获了,而且也判断了。
    怎么会有错啊。
      

  10.   

    to lygfqy(风清扬) :
    估计就是这个了。的确未作同步,
    但每次在一线程同一地方断,正常吗?
    我监视主线程(非监听),断的地方每次都不一样。
    我还是怀疑和监听线程有关啊。