5

VS2017+WIN10,程序运行过程中,返回值正确,但是依然会进入错误处理代码块中,求解?

之前一直在win7平台做开发,因为项目需要,把代码转到win10上运行,发现有错误.
于是自己装了一台win10在本地调试代码,发现一个奇怪的问题.

代码如下:

for (size_t i = 0; i < n重连次数; i++)
{
Sleep(1000);

    LONG retSend = Send(sock, &bufInfo);
    if (retSend <= 0)
    {
        g_Client.Connect(g_strIP, g_nPort);
        sock = g_Client.m_Socket;
        continue;
    }
    break;

}

  就是这么简单的一段代码,在win7平台调试和生成运行都没有问题,但是放在win10就出问题.
 返回值 retSend 接收的是发送数据的长度.
  我在win10环境下 下个断点,断点位置在LONG retSend = Send(sock, &bufInfo);这段代码处,
  发现当Send函数执行完毕后,retSend接收的结果依然是0,(哪怕数据发送成功,并且长度是100,并且正确返回,但是retSend在断点位置,以及断点F10向下走下一条,依然是0)
接着断点走入  if (retSend <= 0) 代码块里面,
奇怪的现象出现了,如果说retSend的结果是0,那么继续向下走,也就罢了,
最关键的是,它在这里突然又变成了正确的值,比如retSend=100了.
程序本来在这个代码块中运行这,结果没有走到结尾,突然就又跳了回去
也就是说直接走到break;这里,跳出循环了.
这个问题困扰我两天了,在这里跪求大神解答.
这段代码在win7环境下测试几年都没有问题的,但是在win10就是不行,不知道是编译器原因还是win10做了某些优化
    Send(sock, &bufInfo);此函数是自己封装的发包函数,里面有一些数据压缩加密,然后就是调用send将数据发送出去.
    在Send()里面,返回值是正确的,但是在这段代码中,retSend接收到的结果却没有即时被复制,直到进入错误处理代码块中突然变好又跳了出去.
    如果没有下调试断点,那么它就不会break,一直在错误处理代码中循环完毕才结束.
查看全部
RitMan
RitMan
2019/04/28 18:37
  • c++
  • c语言
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

2个回复