我使用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)));
到
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));
使得它的工作。
你有一個測試用例顯示? – ouah 2012-07-11 22:57:07
是的,您可能會做錯某些事情,比如依賴導致未定義行爲的構造。這就是沒有[SSCCE](http://sscce.org/)可以說的一切。 – 2012-07-11 23:00:17
您正在處理SIGFPE嗎? – EJP 2012-07-11 23:41:15