首先说一下我的一些简单的调试方法,除了常规的断点调试之外,我还会使用注释的方法来调试。当整个工程代码量相当多且调用层次关系较为复杂时,这种方法能够比较高效的定位到出错误的代码段或某个函数,然后在出现错误的代码段中用断点调试,结合监视器就能逐步定位到具体的错误点了。

有时会遇到下列提示的错误

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的后,就可以使用该类的对象来访问了。

C++实现网格水印之调试笔记(一)的更多相关文章

  1. C++实现网格水印之调试笔记(六)—— 提取完成

    昨天在修改了可以调试出来的错误之后,提取出的水印和嵌入的仍然相去甚远.这个时候我觉得有必要整理一下嵌入和提取的整个过程. 嵌入过程: Step1,嵌入的时候对网格的拉普拉斯矩阵L进行特征值分解,得到特 ...

  2. C++实现网格水印之调试笔记(六)——补充

    调用matlab生成的网格水印特征向量矩阵 从文件中读取的原始网格的特征向量矩阵 好吧,之前得出的结果不正确是因为代码写错了.因为实现论文中的提取方案时代码写错了,自己想了另外一个方法,结果方向两者在 ...

  3. C++实现网格水印之调试笔记(五)—— 提取出错

    在实现提取水印的过程中,遇到了一些问题 首先还是根据论文中的思路来梳理一下整个提取流程 读入两个模型,一个原始模型ori_mesh, 一个水印模型wm_mesh. 将两个模型对齐(即放在同一个坐标系下 ...

  4. C++实现网格水印之调试笔记(二)

    整理了一下要实现的论文Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain,步骤如下: 嵌入水印 à 提取水印 à 优化(网格细分) ...

  5. C++实现网格水印之调试笔记(四)—— 完成嵌入

    接下来的问题是,当模型是对称的时候,结果是符合预期的,但是当模型是不对称的时候,结果是错误的,如下: 输入: 顶点:233 输出: 这又是什么鬼...,我的马呢!!! 看来逻辑上还是有错误 注意这时候 ...

  6. C++实现网格水印之调试笔记(三)—— 初有结果

    错误: error C2338: THE_BRACKET_OPERATOR_IS_ONLY_FOR_VECTORS__USE_THE_PARENTHESIS_OPERATOR_INSTEAD 这种错误 ...

  7. Tomcat调试笔记

    调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...

  8. JavaScript特效(调试笔记)

    JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...

  9. USB wifi调试笔记

    本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...

随机推荐

  1. Linux资源监控命令/工具(综合)

    目录: ps pstree pidof top free uptime ifuser lsof mpstat vmstst pidstat iostat iotop watch sar 1.ps 1) ...

  2. Linux内核的同步机制

    本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...

  3. TCL语言笔记:TCL基础语法

    一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...

  4. Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件

    原文:转:Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件 2011-04-30 12:50 很多人不知道怎么用 IntelliJ IDE ...

  5. 转Struts 权限控制

    权限最核心的是业务逻辑,具体用什么技术来实现就简单得多. 通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中. 对权限的拦截,如果系统请求量大,可以用Struts2拦截 ...

  6. swfupdate flash上传工具

    引用:http://baike.baidu.com/view/1332553.htm 下载地址:http://code.google.com/p/swfupload/ 什么是SWFUpload? SW ...

  7. Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.

    在部署的时候出现Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server ...

  8. (四)CSS选择器和派生选择器

    CSS派生选择器允许你根据文档的上下文关系来确定某个标签的样式.在学习派生之前,先来了解基本的CSS选择器.前面的文章中提到过下图,选择器的位置如下所示: CSS选择器 分为几种基本选择器:元素选择器 ...

  9. onlineDDL测试

    onlineDDL语法: alter table ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} ADD [COLUMN] c ...

  10. Asterisk服务安装配置和启动

    Asterisk服务安装配置和启动 2014年11月4日 11:36 注意: 更新源的重要性 源的地址: http://fffo.blog.163.com/blog/static/2119130682 ...