有感于发现了一个隐藏很久的错误--思维定势
2012-04-19 08:13
260 查看
这两天在给一个毕业设计的改程序,与其说是给他改程序,倒不如说是给自己改,因为程序从头到尾都是自己写的(除了使用的jrtplib、opencv库和别人写好的socket类),程序就是实现一个远程的视频查看,播放控制,就是最简单的从客户端上发送命令查看视频服务器上的视频,使用了RTP视频传输,用的从codeproject上下载的一个封装的socket类来发送控制信息。说到底也不难,其实就是把这几块组合组合,整个程序也是从自己的毕业课题程序中摘出来的。
自己的那个程序跑起来基本正常,偶尔出现崩溃,当时也找过原因,可惜没找到,因为也不是每次都崩掉,只是偶尔,所以也就没再管(现在要毕业了,更不会去管了,留给师弟们去解决去吧!)。现在要带了一个本科毕业设计,说实在的:就我们专业本科生的水平(偶是自动化,重点院校),如果不是自己喜欢编程,上课讲的那点东西,连个VC的工程都不会建立!所以也不指望他能自己做出来,正好现在也木大有事了,所以就给整整吧,好歹人家也叫声学长啊(还请吃了个饭
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
)。
废话了一大堆,还是没有到主题!
总之把自己的程序精简了一下不相关的统统删掉,四个通道也改成了一个通道,界面改变了一下,只剩一个简单的对话框,总之简单的有点寒酸了,相应的代码也进行了修改,单纯的视频传输是没问题的,可是调试控制信息的时候,从客户端到服务器发消息没问题,从服务器发送响应消息总是出现WSA_INVALID_PARAMETER,参数错误!调试了一下午也没找到什么问题~~~
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wail.gif)
。偶然,纯粹是偶然,突然意识到,出现崩溃的时候都是在调用一个函数,就是在对话框界面类中使用socket发送数据,其中函数的参数有一个是socket的引用,也就是带了&,然后就返回去找。。。
终于发现问题了:在自己写的一个传输类中,也有好几个并列的处理接收消息的函数,都是采用socket引用传递参数,而且在cpp文件中都在一块,也就是当时是按顺序写的,其中有一个就是将自己获得的socket通过sendmessage发送到对话框界面上,结果问题就在这里,sendmessage的两个参数,一个用来传递socket的参数,使用的是(wparam)&socket,当时应该想的是直接传值的,由于函数临近的几个函数都是按引用传递也就是出现了很多个&,而且参数名也都一样,思维上就产生一种错觉了,鬼使神差的就加上了&,然后在对话框中接收消息时,解析的却不是按socket的指针,而是直接转换为了socket,结果就将原本的socket指针当做了socket使用,并在界面函数中使用来发送信息,所以每次一调用发送函数就出错。
现在看来,错误其实很简单,但是却隐藏了很长时间,写那段程序大约是一年以前了,当时没怎么用传递过去的socket所以,大部分时间都是运行没问题,所以就没有细究,查错。现在给别人改程序的时候却意外发现了,仔细想想如果不是使用sendmessage的函数附近的几个临近的其他函数都是使用引用,而且参数名字也都一样的话,可能当时就不会出错了。
一连出现的多个相同的东西,形成了一种先是视觉上然后转变为思维上的陷阱,最终只要情况稍微一遍,就会掉进去。
值得好好思考!
自己的那个程序跑起来基本正常,偶尔出现崩溃,当时也找过原因,可惜没找到,因为也不是每次都崩掉,只是偶尔,所以也就没再管(现在要毕业了,更不会去管了,留给师弟们去解决去吧!)。现在要带了一个本科毕业设计,说实在的:就我们专业本科生的水平(偶是自动化,重点院校),如果不是自己喜欢编程,上课讲的那点东西,连个VC的工程都不会建立!所以也不指望他能自己做出来,正好现在也木大有事了,所以就给整整吧,好歹人家也叫声学长啊(还请吃了个饭
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
)。
废话了一大堆,还是没有到主题!
总之把自己的程序精简了一下不相关的统统删掉,四个通道也改成了一个通道,界面改变了一下,只剩一个简单的对话框,总之简单的有点寒酸了,相应的代码也进行了修改,单纯的视频传输是没问题的,可是调试控制信息的时候,从客户端到服务器发消息没问题,从服务器发送响应消息总是出现WSA_INVALID_PARAMETER,参数错误!调试了一下午也没找到什么问题~~~
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wail.gif)
。偶然,纯粹是偶然,突然意识到,出现崩溃的时候都是在调用一个函数,就是在对话框界面类中使用socket发送数据,其中函数的参数有一个是socket的引用,也就是带了&,然后就返回去找。。。
终于发现问题了:在自己写的一个传输类中,也有好几个并列的处理接收消息的函数,都是采用socket引用传递参数,而且在cpp文件中都在一块,也就是当时是按顺序写的,其中有一个就是将自己获得的socket通过sendmessage发送到对话框界面上,结果问题就在这里,sendmessage的两个参数,一个用来传递socket的参数,使用的是(wparam)&socket,当时应该想的是直接传值的,由于函数临近的几个函数都是按引用传递也就是出现了很多个&,而且参数名也都一样,思维上就产生一种错觉了,鬼使神差的就加上了&,然后在对话框中接收消息时,解析的却不是按socket的指针,而是直接转换为了socket,结果就将原本的socket指针当做了socket使用,并在界面函数中使用来发送信息,所以每次一调用发送函数就出错。
现在看来,错误其实很简单,但是却隐藏了很长时间,写那段程序大约是一年以前了,当时没怎么用传递过去的socket所以,大部分时间都是运行没问题,所以就没有细究,查错。现在给别人改程序的时候却意外发现了,仔细想想如果不是使用sendmessage的函数附近的几个临近的其他函数都是使用引用,而且参数名字也都一样的话,可能当时就不会出错了。
一连出现的多个相同的东西,形成了一种先是视觉上然后转变为思维上的陷阱,最终只要情况稍微一遍,就会掉进去。
值得好好思考!
相关文章推荐
- 发现了一个C++错误查询很好的网站
- 用netbeans完成 简单数据库管理系统 的几个错误和解决,发现一个mysql的中文
- 今天在一个10203数据库的alert文件中发现了ORA-1461的错误。
- 亲测cocos2d-x3.2打包到android以及发现一个BundleReader里的错误
- Java程序员惯性思维的一个错误
- 日本政府发现一个隐藏了两年之久的木马攻击
- 百度地图报unsatisfiedlinkerror异常,是一个很难发现的错误
- 由ORA-00979错误发现ORACLE一个BUG
- 今天在一个10203数据库的alert文件中发现了ORA-1461的错误。
- 【错误】为什么在网上下载一个图片,命名为select*from ,结果你会发现保存不了,这是为什么?
- Appache 无法启动,检查 wamp “appache_error.log”文件,发现错误 (OS 10022)提供了一个无效的参数
- 花了一天时间,发现一个隐藏巨深的BUG
- Hibernate错误记录,困扰了哥很久,竟然是表名是数据库中的一个关键字
- 在W3C SCHOOL网站上发现一个关于Schema的错误
- Win7一个很邪恶的功能-发现隐藏ssid的网络
- firefox浏览器下用getElementById取一个隐藏表单域内容时发现的问题
- thinkphp——模板标签中include,由于疏忽发生了一个难以发现的错误
- C++ 错误: ‘std::vector<float> feat’的声明隐藏了一个形参
- jquery callback 隐藏 显示 一个奇怪的发现
- 一个不起眼的错误可能会纠缠你很久