C++实现网格水印之调试笔记(一)
首先说一下我的一些简单的调试方法,除了常规的断点调试之外,我还会使用注释的方法来调试。当整个工程代码量相当多且调用层次关系较为复杂时,这种方法能够比较高效的定位到出错误的代码段或某个函数,然后在出现错误的代码段中用断点调试,结合监视器就能逐步定位到具体的错误点了。
有时会遇到下列提示的错误
0xC0000005错误通常是由于内存访问错误引起,可能是你的程序有错误的指针操作或者访问了空对象
这个时候使用调试,慢慢查找到底哪个指针是空的,找到之后将指针初始化问题就可以解决了。
之前由于贪图方便,把setM函数的参数也设置为m,然后赋值语句变成了m = m,在我的理解里,应该是不会出现问题的,但实际上这样赋值会出现歧义。看来太久没有写面向对象的程序,连一些基础的问题都忘记了。。。由于这个错误的set函数,导致m的值总是不正确,继而导致了后续出现一些新的错误,比如我遇到的问题是,vector下标访问越界,因为我的vector的大小是由m来决定的。这种错误不容易被发现,因为可以通过编译,并且从调试的角度来看,一般不会想到m的值会有问题。
继续往下写程序又遇到新的问题,提示如下:
经过调试,发现错误出在createWB这个函数上,首先看下这个函数的声明和定义
应该不存在问题,而且在一个单独的工程中写createA和createWB都不会出现错误,为什么会出现上述错误呢?
原因是c没有初始值。。。
接下来在这句话上出现了中断
调试得出的结果了alpha没有赋初值。。
这个地方涉及到类之间函数的调用,需要仔细整理一下思路。
我在TestMyProject中写了如上数据类型。一开始我希望在别的工程中也能访问上诉数据,所以我以为,把这些私有的数据类型的访问说明符改为public就可以了。我在这个类本身的一个函数下调用了set函数来设置这些数据,然后我错误的以为这时上诉类型都被赋值成功了。
随即我在其他工程中声明了一个TestMyProject的对象,然后用这个对象直接访问上述数据。结果出现了vector下标越界错误。
这个错误的出现是因为对面向对象中的数据的访问属性理解出现了错误,一度困扰我很久。
事实上,public访问说明符的作用是被修饰的数据可以被:
1.该类中的函数、
2.子类的函数、
3.其友元函数访问,
4.该类的对象访问。
而当实例化一个对象时,每个对象有自己独立的数据成员,除非在类中的某个数据是static的(这种情况下所有实例共享同一份数据),否则在创建实例时,实例就保存了自己的数据成员,需要自己单独的调用set函数(或直接调用数据成员)进行赋值。因此,在我遇到的这个例子里,将数据声明为public的后,就可以使用该类的对象来访问了。
最新文章
- 基于NFS的分布式持久化
- 怎样让js循环重复执行过程
- Effective Java 71 Use lazy initialization judiciously
- IE5,IE6,IE7,IE8的css兼容性列表[转自MSDN]
- Oboe 提升web 用户体验以及性能
- 6月24日AppCan移动开发者大会礼品清单遭泄露
- 局域网实现 yum
- 1.(1)编写一个接口ShapePara,要求: 接口中的方法: double getArea():获得图形的面积。double getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的dou
- iOS - 发送邮件
- iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下
- Android中在布局中写ViewPager无法渲染出来的问题
- 5、手把手教你Extjs5(五)使用图标字体来美化按钮)
- 纠错输出编码法ECOC
- yii2之DetailView小部件
- CCF系列之Z字形扫描(201412-2)
- SharePoint 门户网站的图片轮播-页面定制
- RSA加解密工具类RSAUtils.java,实现公钥加密私钥解密和私钥解密公钥解密
- bzoj2200拓扑排序+最短路+联通块
- java 几种对象
- ubantu 安装redis
热门文章
- 可持久化trie 学习总结
- Hibernate逍遥游记-第8章 映射组成关系(<;component>;、<;parent>;)
- Java文件解压之TGZ解压
- ipc$漏洞利用实例
- Android LayoutInflater.from(context).inflate
- js中鼠标滚轮事件详解
- 量化生产力Quantifying Productivity
- ireport制作小技巧
- Jeally Bean中MonekyRunner 帮助文件
- poj 3368 Frequent values(RMQ)