`
jgsj
  • 浏览: 960425 次
文章分类
社区版块
存档分类
最新评论

怎么回事?在vs2005中和在vc6中运行时的错误不一样(指针问题)

阅读更多

最近我们班做课程设计,老师给我们一些题目,做银行管理系统、宾馆管理系统、考场管理系统、人事管理系统等等。我们一般是两、三个人一组。因为我比较高傲,所以别的同学都不愿意和我一个组。结果我就一个人一个组了……

不过一个人一组也未尝不是一件好事。我依靠自己的努力,连续奋战六天,终于把我那个人事管理系统做好了。由于源代码比较长,因此不便于贴上。在做的过程中,我遇到了很多问题。遇到了很多bug,但是自己通过查资料、上网,终于把它们解决了。课程设计没完,我还没有轻松。其余各组的同学们没有写出什么名堂,结果不是抄网上的源代码,就是复制老师的例子程序进行修改。达不到效果的话就找我。都说看懂别人的程序困难,我还真啃上了这根硬骨头。

由于是东拼西凑的,同学们的程序往往看起来支离破碎,可读性很差。同学们还有这样一个不好的习惯,代码长了还是写在一个cpp文件中。尽管老师指导了他们如何分文件写,但是似乎他们还不习惯。

我和一个编程序比较好的同学交谈时,得出这样一个经验:c++中的类相当于数据库中的基本表,c++中类的成员属性相当于数据库中的属性,如果编写多个类并且相关联的话,就相当于进行跨表查询,它的执行效率是最低的。因为涉及到了广义的笛卡尔积。所以在需求设计阶段,能进行归并的尽量归并,哪怕是归并后的类很庞大。

接下来我说说非常常见的错误:指针错误,这种错误往往编译、连接时通过,但是运行时出错。以下就是我编写控制台程序遇到错误的经验之谈。

…•●如果运行时出现“某某内存不能为read”,我认为问题在于用空指针指向了一块没有地址的区域(空区域),计算机无法找到这块区域,只能返回错误,就像你要别人找一件实际不存在的东西一样。

…•●如果运行时出现“某某内存不能为written”,我认为问题在于你的数组越界或与指针有关的非法操作。因为你非法进行了该操作,会立刻被聪明的windows操作系统发现并禁止。

…•●但有种情况,我也不清楚(谁来帮我?),就是也是出现内存不能为read的情况,但是很蹊跷,因为我在vc6上它是在main()函数右边大括号时出错,而用vs2005时错在了子函数的右边大括号,更蹊跷的是,我用vs2005调试它,竟然不报错!原因我不清楚,但一点是肯定的,程序并没有问题,要么是编译器编译不正确(我没有学编译原理,不好解释),要么是系统对指针要求过于严格,指针在析构的时候不满足系统的要求,从而报错。

以上就是我在这次课程设计的心得,有问题的欢迎和我讨论。下面送上一位有名的日本声优兼大学生--花泽香菜的照片!于是我轻轻地飘走了----上课铃已经响喽。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics