这个问题分两个小问题来细说。问题的背景是VS2008项目中封装了网络协议接口类,对象成员有一个SOCKET类型成员变量和封装的进行三次握手的成员函数。在调用成员函数时报错发生访问冲突。
1、写入位置 0xCDCDCDCD 时发生访问冲突
跟进问题之后,发现涉及到了未进行处理的SOCKET变量。主要还是优先排查有没有空指针之类的问题。在数据窗口进一步排查,发现了下面的第二个小问题。
2、CXX0030: 错误: 无法计算表达式的值的问题
在主进程的基类中,可以看到涉及TCP部分的成员变量无法获取具体值
这个问题和VS2017不同,高版本IDE对于未处理的变量会赋特殊值。可能长期使用高版本VS会忽略这方面。但是也是一个需要注意的部分。
原版写法
pMainWnd->TcpServer->InitTCPSever();//成员函数中处理
改进写法
...
sockClient = socket(AF_INET, SOCK_STREAM, 0);
addrSrv.sin_family = AF_INET;
...
//直接进行网络通信处理
对于这个问题的处理,目前是解除了一些封装,在主线程里进行了直接处理。属于临时方案,如果各位大佬有更好的办法,可以指导一下,谢谢大家。
3、总结
VS2008与VS2017相比,支持C++特性不同,IDE功能的效率也不同。会有很多需要注意的细节问题。还是需要更加严谨的进行编码,注意更多的细节问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)