代码中写了一个A功能需要和下位机进行通信,通信模型是iocp。
这个功能接口A的操作过程是:首先向下位机发送一次数据,下位机就会回应一次。
单次调用时数据的发送与接收没有问题,但是当本人把这个接口放在一个循环里再调用时,循环大致200多次左右的时候,就会发生异常。
如下:xxx.exe 中的 0x00000010 处最可能的异常: 0xC0000005: Access violation
每次循环200多次调用后都是这样,程序发生异常后,调用堆栈里只显示了这个一行东西如下:
> 00000010()
单看这个异常应该是个非法访问,很有可能是指针相关的误操作,没有调用堆栈的提示,本人把程序中调用时执行大多数位置都写了调试信息,(例如使用指针之前,打印指针的值能否可用),然后发现是在WSASendTo调用完毕后就出现了异常,workthread的也有相关的发送信息,本人在想为什么200以前可以,后面就出现异常了?本人好纠结啊!
这个功能接口A的操作过程是:首先向下位机发送一次数据,下位机就会回应一次。
单次调用时数据的发送与接收没有问题,但是当本人把这个接口放在一个循环里再调用时,循环大致200多次左右的时候,就会发生异常。
如下:xxx.exe 中的 0x00000010 处最可能的异常: 0xC0000005: Access violation
每次循环200多次调用后都是这样,程序发生异常后,调用堆栈里只显示了这个一行东西如下:
> 00000010()
单看这个异常应该是个非法访问,很有可能是指针相关的误操作,没有调用堆栈的提示,本人把程序中调用时执行大多数位置都写了调试信息,(例如使用指针之前,打印指针的值能否可用),然后发现是在WSASendTo调用完毕后就出现了异常,workthread的也有相关的发送信息,本人在想为什么200以前可以,后面就出现异常了?本人好纠结啊!
解决方案
20
调试,把循环降到200以下,确认是不是原因是循环问题
20
无效就是无效了啊,你打印出来的值只不过是句柄号而已,可能close过你没置成invalid,或连接已经断掉了