この関数は、ピクセルごとに、2n + 1の "半径"の周りの色の平均値で各ピクセルの色を回すことによってイメージをぼかします。C - 浮動小数点例外(コアダンプ)
(次のピクセルにスキップする部分は既に実装されていますので、心配しないでください)。
私は正常にこのコードをコンパイル:
void
blur_pixels(image *img, pixel *p, size_t i, size_t j)
{
//i = current height of pixel, j = current width of pixel
int side = 2*blurRate+1;
int total = 0;
int leftRight = i-blurRate;
int upDown = j-blurRate;
int tmpHr = 0, tmpHg = 0, tmpHb = 0;
for(; upDown < j+blurRate; upDown++) {
if(upDown >= 0 && upDown < img->height) {
for(; leftRight < i+blurRate; leftRight++) {
if(leftRight >= 0 && leftRight < img->width) {
tmpHr += (p+leftRight)->r;
tmpHg += (p+leftRight)->g;
tmpHb += (p+leftRight)->b;
total++;
}
}
}
}
p->r=tmpHr/total;
p->g=tmpHg/total;
p->b=tmpHb/total;
}
をしかし、私は、コードを実行したときに、私は次の例外を取得:
Floating point exception
誰もがなぜ知っていますか?コンパイラの警告がfor()
ループの混合符号付き/符号なしの計算を示すオンにされていないため
あなたは 'total'はループの後に> 0であることを確認していますか? – tkausl
おそらくゼロ除算。デバッガを使用します。 –
おそらく合計は0です。 –