PellesC C コンパイラを使用しています。時々、コードがランダムに動作しなくなります。特定のステートメントがそれを引き起こす可能性があります。たとえば、変数に sin(c) (c は double) を掛けたところ、コードは実行を終了したように見え、結果はありませんでした。フリーズすることもあれば、戻ってくるように見えることもありますが、問題のあるステートメントを削除するか、コンパイラの最適化、具体的には「速度を最大化」または「速度をさらに最大化」を無効にすることで、いつでも修正できます。クラッシュするポイントの近くに 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));
それを機能させます。