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了为什么还是出错....
一个监听线程,
当一个用户连上来时需要为他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了为什么还是出错....
这个函数使用不当,会使内存分配new失败。
大概3000到5000个连接,
不是class是struct,
我new后保存了指针,应该不是泄露吧!
任务管理器看也才用了30M左右吧!
就算new不成功也不该出错啊。
我new后马上就判断了p是不是0出的错是“对空指针的访问(对0地址的访问)”
奇怪的是DebugView停在了Before new后面 , After new前面!!
new是要系统内存耗尽才失败吧。
即便失败,我也应该捕获了,而且也判断了。
怎么会有错啊。
估计就是这个了。的确未作同步,
但每次在一线程同一地方断,正常吗?
我监视主线程(非监听),断的地方每次都不一样。
我还是怀疑和监听线程有关啊。