【发布时间】:2012-07-11 22:54:08
【问题描述】:
我正在使用 PellesC C 编译器。有时我的代码会随机停止工作。一个特定的语句可以触发它。例如,我将一个变量乘以 sin(c)(c 是一个双精度数),我的代码似乎刚刚完成执行而没有结果。有时它会冻结,有时它似乎只是返回,但我总是可以通过删除有问题的语句或禁用编译器优化来修复它,特别是“最大化速度”或“最大化速度更多”。如果我在崩溃点附近的某处添加 printf 语句,冻结也将在几乎 100% 的时间内消失。我从来没有发现任何表明我不正确地访问内存的东西,我很确定这是一个编译器问题。我想知道是否有人可以对此有所了解。事实上,我是否有可能做错了什么?或者这是 Pelles C 编译器的一个已知问题?
编辑:
变化
canvas->pixels[(y*canvas->pitch)+(x*canvas->Bpp)+2]=(unsigned char)(255.0*dtempA*(1-sin(c)));
canvas->pixels[(y*canvas->pitch)+(x*canvas->Bpp)+1]=(unsigned char)(255.0*dtempA*(1+cos(c)));
canvas->pixels[(y*canvas->pitch)+(x*canvas->Bpp)]=(unsigned char)(255.0*dtempA*(1+sin(c)));
到(最后一行末尾的差异)
canvas->pixels[(y*canvas->pitch)+(x*canvas->Bpp)+2]=(unsigned char)(255.0*dtempA*(1-sin(c)));
canvas->pixels[(y*canvas->pitch)+(x*canvas->Bpp)+1]=(unsigned char)(255.0*dtempA*(1+cos(c)));
canvas->pixels[(y*canvas->pitch)+(x*canvas->Bpp)]=(unsigned char)(255.0*dtempA*(1+1));
让它工作。
【问题讨论】:
-
你有要展示的测试用例吗?
-
是的,您可能做错了什么,例如依赖导致未定义行为的构造。这就是没有SSCCE 可以说的所有内容。
-
你在处理 SIGFPE 吗?
-
不幸的是,我现在正在处理的程序大约有 750 行代码,向您展示一小段代码可能会解决该错误,因此无法进行 SSCCE,部分原因是我我很难理解这些故障。我 100% 肯定算术不是问题,这个问题是由过去没有任何此类操作的代码行引起的。
-
@BigEndian:SSCCE 是可能的,你只需要努力。我敢打赌,你不需要全部 750 行代码就能重现问题。
标签: c compiler-construction compiler-optimization pelles-c