由内存的使用联想到的

来源:互联网 发布:关闭mysql服务 编辑:程序博客网 时间:2024/05/01 07:31

      这两天自己湖南DVB_C的程序经常会在操作时莫名的死机。由于没有规律,所以不知道是哪个地方出 错了,自己也为此苦恼了一天,把程序看了又看也不知道出了什么问题。 不过由于是在密码输入时候出现的死机,而且是操作一会儿后才有不规律的死机,我猜想内存可能出问题了,因为在密码输入由于要备份界面上的东西,所以会动用大量的内存来保存当前界面上的一些信息。一般这种不规律的死机是由指针引起的。

      于是经过自己的不断的操作终于在仿真的时候死机了,而且出现了打印信息,正如自己所料,出错提示是没有足够的内存分配。

      现在问题来了,虽然没有足够的内存来分配,但是也至于要死机啊?一查自己的函数发现自己在分配内存不成功的状态下依然往下执行程序,于是出现了空指针的操作导致死机。

      出现这种问题,自己也不知道该怎么总结自己的错误,只能说没在意这个问题,没有对这个问题引起足够的重视。在写程序的时候,自己也许根本没有想过如果分配内存不成功的话怎么去处理。总以为这个地方是不错出错的,就像1+1=2一样。没想到在自己程序架构建设不合理的情况下,这种错误就产生了。如果这个地方早点加个出错判断的话,那有问题的时候就很好追踪了。其实是非常简单的一句判错的话,但是我就没加。以前看以一位比我经验多工程师的程序,发现判错的地方很多,总觉得没有必要,现在 终于知道了是很有必要的啦。

      既然是内存不够分配,那又是什么耗尽了内存呢?经自己一查发现是有个递归调用,如果用户将所 有频道都加密的话,然后不断按上下键的话,我就一直在递归调用播放节目这个函数,递归调用时,分 配的空间不会释放,需要等整个程序退出时才会释放,所以死机成了必然。 这个递归调用是我刚加上去不久的,没想到一下子就出问题了。由此我又想到了上次写程序的时候 变量赋值由于用复制过去的没有将变量名改过来而引起的死机,虽然问题解决了,但是这种粗心所犯下的错真的是很难原谅的。

      通过此事使我懂得写程序的一些必须注意事项:

      1.尽量给自己的程序能加出错判断的地方都加上出错判断,也许正常操作是不会出错的,但是如果 程序运行部正常的时候呢?那样就可以给自己节约很多的差错时间。

      2.自己似懂非懂的函数千万不要添加到程序中去,添加进去的程序一定要自己完全了解透彻的。

      3.永远记住任何时候写程序都要非常细心。

原创粉丝点击