我正在使用 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)));
to(最后一行末尾的差异)
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));
让它工作。