找出诡异的Bug:数据怎么存不进去

  带着学生做课程设计。程序一大,课程中做过了小项目,练过了分解动作,一到合起来了,难免还是要乱了分寸。其实,实战的功夫,就是这样出来的。(课程设计指导视频链接(第36课时,3.18 银行系统开发),课程主页在链接,指导文档见链接,示例程序见链接)。
  话说,已经有两位做银行系统的同学和我说,“文件中写不进去数据。程序一退出,明明写进去了,结果却是空文件。”这不是一个小打击。
  做软件,找Bug,有些像打空气,使半天劲,人家就不理你。学计算机的人,练的就是这样的功夫,要学会自己创建线索,找出问题所在。
  话说,出问题的两位同学的程序,框架大体如下:

  因为数据要在文件里存储,所以,可选的方案是,在构造函数中读文件,在析构函数中写文件。上面的程序就是照这种思路设计的。
  然而,程序退出后,文件就是空的。
  老贺看了也纳闷,写文件的语句中规中矩,然而就是不对。
  仔细审查析构函数中文件的打开方式ios::out,似乎有嫌疑,但排除了。在实际运行的系统中,ios::out的方式不常用,因为这样一打开,也就意味着存在的文件也要重建,用ios::app的更多。
  可是,在这个由大一学生实施的设计中,简化的方案是,将所有的数据读入内存,操作针对内存中的数据,而最后,就是要重建文件,将内存中的全部数据重写一遍。
  几百行的程序,就不可以用眼睛盯着找问题了。单步跟踪,对这样的程序,如果问题具体在哪儿都不清楚,也不是一个好办法。
  析构函数中写文件的部分最可疑。我在析构函数~Bank中加了一句。结果发现,最后的,析构函数执行了两次。
  然后,在main函数的return 0;前加了一句,发现输出的信息是:

in destructor.
end of main
in destructor.

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年6月9日
下一篇 2015年6月9日

相关推荐