错误合集(2013-3-11更新)

 今天将书上的一个实例程序实现的时候,发现问题多多。首先是书上的代码本来就有BUG,而且书上作者是抄袭中的渣渣,连抄袭也没有抄完全,再加上自己能力上的问题,在查错、发现问题、调试上花了很多时间。最令人蛋痛的是,有很多错误其实是已经错过很多次了,又或者根本不是什么技术性错误。为了更好地节省自己的时间,自己每犯一次错误就在这里记一次,总结一次,就算再忙也要。


这里的错误都将以小标题的格式分开,以关键字标识,按序号顺序排下来。例如:1。重定义 Winsock 

 

--------------------------------------分割线----------------------------------------

1.WSASocket未定义(Winsock头文件包含顺序、VC6)

    
今天将书一个类似Ping的程序转换到VC6的时候,出现了很多问题。首先就是明明在包括了<winsock2.h>、链入了ws2_32.lib的情况还出现了WSASocket未定义的情况,而且会出现更多“重定义的错误”,在网上找了很久也没有找到解决方法。网上有很多人都有相似的问题,但是都是在自己解决了问题之后说了一句:“找到问题的所在了,谢谢所有楼上”就走了。。。。蛋痛。。。。。
     后来自己在之前写过的调用WSASocket中的程序中发现了有些不同,那就是<winsock2.h>的头文件总是放最前的,于是试一试,结果编译通过了。虽然不知道为什么,但是问题总是解决了.......

代码如下:
#include<winsock2.h> //the header must be first included
#include<WS2TCPIP.H>   //for IP_OPTIONS which equal to 1
#include<windows.h>
#include<stdio.h>
#include"CPing.h"

#pragma comment(lib,"ws2_32.lib")

     此外,正如注释所示,如果在代码中出现“IP_OPTIONS未定义”的时候,正是缺少了相应的头文件。因为书上的代码没有写是那个IP_OPTIONS是什么东东, 所以一直以为是宏定义的常量,以为作者忘记写了,其实是头文件里面的。WS2TCPIP.H貌似是一个扩展头文件。




2.WSASocket创建原始套接字失败(管理员权限、VC6)


这一个问题主要是出在我身上,明明书上有写,可是我看过之后完全没有印象,可能这就是我不喜欢看电子书的原因,收效很低。

代码:
m_hSocket = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0,WSA_FLAG_OVERLAPPED);
代码是没有问题的,传的参数也正确(AF_INET、SOCK_RAW、IPPROTO_ICMP),但是调用就是失败,返回的错误代码好像是10013,错误信息大概就是说“对套接字的访问没有权限”云云。。翻了下书,找到了答案,要这样调用,需要管理员权限运行VC6。

 

3.客户端 服务端 地址(这里自己实在错得蛋痛啊~~)

在测试程序的时候,在服务端一般用INADDR_ANY作地址,但是在客户端一般不能用INADDR_ANY这个来做地址啊~~否则就会出错~~~我就是愚蠢地错在这里。。。不想说了。。自己真的是渣渣的。

 

 

 4.库文件已经定义了IN、OUT,出现冲突(定义常量、VC6)

前些天在写那个电梯的时候,因为电梯的请求我划分为电梯内和电梯外两种,所以用枚举的变量将这两种请求定义了一次,结果出错了,而且错误的提示完全根那个错误无关。后来将IN、OUT改为LIFTIN、和LIFTOUT就通过,所以果断是与库文件自己定义的的常量发生冲突了。

 

 

5. VC6.0 用多线程编程(_beginthreadex出在未定义的错误)

在VC6下用_beginthreadex编写多线程程序时,不但要将<process.h>包含进来,而且还是设置工程属性,选择C/C++

一栏,在分类里选择Code Generation,在Use run-time library那一个栏选择多线程版本就可以了。

 

6.消息宏的使用(消息处理函数的定义)

自己定义的消息处理函数,需要查看库里面的该消息处理函数的声明。点击、HANDLE_xxMSG转到其定义处。


 

7.DialogBox调用失败返回-1,对话框没有显示,但是GetLastError()返回的错误代码却是0 (360安全卫士)

这个也不知道是什么原因,反正只要360关掉,我的对话框就没有成功显示,只有360安全卫士在的时候,才会调用成功。。


 

8.VS或者VC6调试多线程程序,系统出现假死现象(据说是XP系统bug)

据说是和UI有关,我自己在调试程序的时候,发现当工作者线程Sleep在两秒以下,界面线程准备显示窗口的时候,就会出现系统假死,初步估计是UI问题。当我将Sleep时间,调到2秒以上,系统再也没有假死过。。。


 

9. 多线程编程(临界区)

如果在多线程编程时,发现最后一个活动着的线程在进入临界区时也阻塞了,一般就是进入临界区与离开临界区的次数不等而造成的。所以Enter与Leave也成对出现。


 

 

10、用fread读取EXE等格式问题(用fopen打开格式问题)

今天在写一个传文件的测试程序时,发现传不了EXE等格式文件,文件指针总是过早的指向EOF。后来将fopen格式改为rb就可以通过了,应该是要以二进制读文件才行。



11、用Qt Designer 更改ui文件后,ui*.h不自动更新问题解决办法

清理项目,后面删除原有的ui*.h文件,用新的ui*.h(在其它地方,应该就是当前目录)代替之,然后重新构建项目即可解决此问题。


12、关于CodeBlock在调试时断点处不停的解决方法

项目的路径名一定要为纯英文,否则会出错。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值