关于“error: Program received signal SIGSEGV, Segmentation fault.”。

之前多次遇到的情况都是:对空指针进行了操作

比如:material_ptr->shade(sr)

若material_ptr为空指针(或者对应的指针并不是“指向某拥有shade()成员方法的对象”的指针),则可能报这个错误。

但是,今天遇到一件诡异的事情。

先交代一下事情发生的背景。本人在学习《Ray Tracing from the Ground Up》,这本教材提供了源代码,但是源代码不全,而且前后章节对应的公共代码部分有不兼容的情况。另外,还有就是原作者是在visual studio的环境下编写的。但是本人习惯使用Codeblocks, 所以需要将书上的源代码移植到Codeblocks的project上。昨天移植的代码到书本的chapter 14: Light and Materials;今天在移植chapter 15: Specular Reflection。其实一开始挺顺利的,索性将官网上提供的所有代码都移植上来,修修改改,也算移植完成了。

都已经能够生成对应的图形了,贴图如下:(反射模型为“Phong Reflection”, 光照模型为“环境光”和“平行光”)

由于生成该图形需要的时间比较长,所以就对图形进行了裁剪,也得到了如下图形:

这段时间做了些“手欠”的事情:之前不是将后面章节的有关无关的代码也移植上来了嘛,现在时不时将多余文件移除一个。

生成如上图形之后,正想将漫反射光撤掉,看看只有镜面反射光时是什么图形。

出问题了!!!!!!!!!!!!!!

RGBColor RayCast::trace_ray(const Ray ray, const int depth) const {
ShadeRec sr(world_ptr->hit_objects(ray));

if (sr.hit_an_object) {
sr.ray = ray; // used for specular shading
return (sr.material_ptr->shade(sr));
}   
else
return (world_ptr->background_color);
}

如上红色代码通过指针call到:

RGBColor Phong::shade(ShadeRec& sr) {

Vector3D wo = -sr.ray.d;
RGBColor L = ambient_brdf->rho(sr, wo) * sr.w.ambient_ptr->L(sr);

……

}

跑黄底那句代码时,报错:“Program received signal SIGSEGV, Segmentation fault”。

根据之前的经验,很快定位到w的指针出现了问题。

为什么?不知道什么原因。发现到shade()函数时,sr的成员变量中多了color成员。所以查了一下ShadeRec 类定义的地方,发现:

RGBColor color; // used in the Chapter 3 only

意思是说,“color”对于chapter 3之外的章节是多余的咯。

所以,索性将和该成员相关的代码都注释掉。还真有效果,现在从trace_ray()函数call到shade()函数w值不会变了,问题好像解决了。

但是,但是!!!!!!

刚生成一个像素点,然后在trace_ray()中跑这句代码(return (sr.material_ptr->shade(sr));)再次报错:“Program received signal SIGSEGV, Segmentation fault”。

貌似,出现问题的位置提前了。而且,现在不仅仅是在chapter 15对应的Phone材料图形生成是有问题,在生成chapter 14对应的matte材料的的图形是也存在同样的问题。

折腾了好几个小时,没有任何头绪。

尼玛!!!!心中无数神兽在奔腾!!!!

所以,无奈之举:在chapter 14的基础上重新移植chapter 15的代码。严格做到:只移植chapter 15必须的代码,绝不加入多余代码。

重新移植后,终于正常了。果断~立刻~马上备份一下。链接:http://download.csdn.net/detail/libing_zeng/9757762

引起问题的原因算是找到了:手欠,时不时将多余文件移除出项目。

但是问题背后的原理是什么还是搞不清楚。

所以,

做事情不能偷懒,不能马虎。

最重要的不要手欠。

谨记!

error: Program received signal SIGSEGV, Segmentation fault. (Codeblocks, C++)相关推荐

  1. error: Program received signal SIGSEGV, Segmentation fault. (Codeblocks, C++)(2)

    之前,针对这个问题也总结过:"error: Program received signal SIGSEGV, Segmentation fault. (Codeblocks, C++)&qu ...

  2. 解决Program received signal SIGSEGV, Segmentation fault.的辛酸

    最近写一个算法很简单,涉及到链表的归并,在追求速度的时候,尽最大程度上使用了指针,然而却带来了异常灾难. 编译通过,在debug的时候,我看见了这个.....Program received sign ...

  3. Program received signal SIGSEGV, Segmentation fault.

    GDB调试的时候出现了: Program received signal SIGSEGV, Segmentation fault.(程序收到信号SIGSEGV,分段故障) SIGSEGV:在POSIX ...

  4. dev c++ 中的Program received signal SIGSEGV Segmentation fault

    在编写程序的时候程序不能正确输出结果或者程序无法运行 在debug的时候系统提示 系统提示报错Segmentation fault 从字面上理解 SIGSEGV是是当一个进程执行了一个无效的内存引用, ...

  5. Debug:Program received signal SIGSEGV,Segmentation fault.

    错误描述 最近在用Dev-C++编写程序时,程序能够编译运行,奈何本该接收键盘输入数据的程序,运行之后直接显示"请按任意键继续-"字样结束运行了.调试后发现了报错信息"P ...

  6. Program received signal SIGSEGV, Segmentation fault

    c语言的小问题,纠结了我一会,归总还是自己这块不是太明白. 首先我们先看: int a;//这个是申明了一个int类型的数,实际开辟了一个内存空间给a,a由一个,地址值.接下来你操作a就不会有问题. ...

  7. ros中 指针传递 ros::NodeHandle *node 报received signal SIGSEGV, Segmentation fault

    ros中 指针传递 ros::NodeHandle *node 报错: Thread 1 "currencyChassis" received signal SIGSEGV, Se ...

  8. C++报错signal SIGSEGV, Segmentation fault

    最近在学习链表的时候遇到了一个问题,在以下代码中访问结点s会报signal SIGSEGV, Segmentation fault LNode *p, *s; // p为要插入位置的前驱结点,s为待插 ...

  9. Program terminated with signal SIGSEGV, Segmentation fault.

    问题: 在程序运行时出现了:Segmentation fault (core dumped),分段故障(堆芯转储)也就是段错误. 我首先在一篇博客上面找到如何使用gdb调试: 1.首先使用ulimit ...

最新文章

  1. android类名方法名不混淆,android – 如何告诉Proguard混淆类名
  2. 标准C++中string类用法总结
  3. 双绞线的八根线的作用
  4. Powershell 渗透测试工具-Nishang
  5. mybatis中useGeneratedKeys用法--插入数据库后获取主键值
  6. matplotlib 笔记:使用TeX标记
  7. BABOK - 开篇:业务分析知识体系介绍
  8. 分时系统是计算机网络嘛,简述计算机网络与分时多用户系统多机系统分布式系统的区别...
  9. SEP客户端部署方式及故障处理手册____借鉴文档的思路方法
  10. cad字体安装_装了1个G的CAD字体后,我的CAD崩了怎么办?
  11. MacOS下DockerCE的使用方式
  12. 计算机怎么安错误,电脑安装iTunes提示安装程序发生错误如何解决
  13. Ubuntu迅雷下载工具安装使用
  14. 计算机24点游戏音调,24点游戏,任意点游戏在线计算器,4个数加减乘除算24点,任意点_三贝计算网_23bei.com...
  15. IP数据报首部的格式:关于标识(identification)、标志(flag)和片偏移
  16. 两步就能使用pyqt制作软件界面,写一个基于you-get的windows端app
  17. 【Ubuntu】Ubuntu18.04无法识别移动硬盘、U盘解决方法
  18. K210频谱显示桌面摆件(Sipeed Maix Dock)
  19. 瞻博网络持续深耕 以“本土化”撬动“中国心”
  20. 关于冲正,需要知道的那点事

热门文章

  1. Leetcode 347.前K个高频元素
  2. 【ISL-1】统计学习概览
  3. LaTex字体、符号汇总
  4. JLOI2015 城池攻占
  5. Javascript总结(全)
  6. tp5 + layui 上传图片[支持单张和多张 ]
  7. 使用UML工具分析类图与类的关系-bouml(java和C++)
  8. MSSQL同步刷新视图字段长度和源表保持一致
  9. ServletConfig讲解
  10. ANDROID PAD版本号 PHONE版本号 源代码有什么 差别?