指针带来的意想不到的功能紊乱

原来的图形是这样子的

 

但是当我向编辑画添加文本之后,显示就变了:

 

可以看出原来的红色虚线现在变成了蓝红夹杂。。。。。。

什么情况?  给我报个错也好啊, 这......让我怎么着原因啊?

初步猜想是向编辑器中添加文本的过成功,程序意外的改动了我的数据造成的。

原因就在于添加文本的时候程序运行了意料之外的东西造成的,那么根源是什么呢,这是怎么造成的呢?

在画图的时候,每个图形类都有自己的画图函数DrawShape()

 

他们共用了同一个画板指针pDC,因此当这个参数传给每一个图形的画图函数时,在函数中对他的修改都会反映到画板实例pDC所指向的对象,因此出现了上述BUG。

 

在我们组的项目中,绘制文本时做了如下设置,将背景变为透明,但是函数返回时,没有将这一设置还原,因而会出现红蓝夹杂的线条

 

只需要在函数返回之前恢复默认设置就行了。

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

鼠标选中图形 删除图形 会出现运行错误

 

 

加上这句

pDoc->ClearGraphSelect();

就OK

分析:

这个错误是版本回滚之后慢慢调试出来的

之前加上了新功能以后根本就(几乎)不可能找出BUG,因为完全不会联想到这个方面,实际效果和报错内容以及实际的画图操作步骤都和这个表面上毫无关系,但是在程序里面却存在着致命的关系。

 当一个图形被删除时,指向它的那些指针却不会,当然一般删除对象都是通过指针来实现的,那些调用析构函数自动实现的对象销毁也就自然很少会需要有指针指向它,因为可以直接用到它嘛(非绝对)。如果有很多的指针指向了这个对象(new出来的),但是设计者只需要通过一个指针就能够释放这个对象,那么再通过指针去访问这个对象会出现运行时错误,因为对象已经不存在了,究其原因,还是设计者不够细心,逻辑不够缜密。

posted @ 2018-12-25 16:51  从零开始的大学生活  阅读(137)  评论(0编辑  收藏  举报