dポイントプレゼントキャンペーン実施中!

学校の課題で画像処理の平均値フィルタを作っているのですが、コンパイルは通るのに実行しようとすると「rep5.exe の 0x0018192f でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x01ecfb60 に書き込み中にアクセス違反が発生しました。」 というメッセージが出て実行できなくなってしまいます。
もし分かる方がいらっしゃったら教えていただけると幸いです



以下、問題のソースファイルです


void output(char* name, int *image,int width, int height)
{
FILE *fo;
int i = 0;
int k = i-width;
if((fo = fopen(name,"w")) == NULL){
fprintf(stderr, "File not found. - %s -\n",name);
exit(1);
}
fprintf(fo,"P2\n%d %d\n255\n",width,height);
for(i = 0; i < width*height; i++){
if(i != 0 && i % PGM_MAXNUM == 0){
fprintf(fo, " \n");
}else if(i != 0){
fprintf(fo, " ");
}





if(i % width == 0) //注目画素が左端なら
{
image[i-1] = 0;
image[i-2] = 0;
image[i-width-1] = 0;    (←が出たところ)
image[i-width-2] = 0;
image[i-2*width-1] = 0;
image[i-2*width-2] = 0;
image[i+width-1] = 0; image[i+width-2] = 0 ; image[i+2*width-1] = 0; image[i+2*width-2] = 0;
}


if(i % width == 1) //注目画素が左端から一つ離れた所なら
{
image[i-2] = 0; image[i-width-2] = 0; image[i-2*width-2] = 0;
image[i+width-2] = 0; image[i+2*width-2] = 0;
}



if(i+width < width*height ) //注目画素が下端なら
{
image[i+width-1] = 0; image[i+width-2] = 0 ; image[i+width] = 0; image[i+width+1] = 0; image[i+width+2] = 0;
image[i+2*width-2] = 0 ; image[i+2*width-1] = 0; image[i+2*width] = 0; image[i+2*width+1] = 0; image[i+2*width+2] = 0;
}

if(i+2*width < width*height ) //注目画素が下から二列目なら
{
image[i+2*width-1] = 0; image[i+2*width-2] = 0 ; image[i+2*width] = 0; image[i+2*width+1] = 0;image[i+2*width+2] = 0;
}



if(i % width == width - 1) //注目画素が右端なら
{
image[i+1] = 0; image[i+2] = 0 ; image[i-width+1] = 0; image[i-width+2] = 0; image[i-2*width+1] = 0 ; image[i-2*width+2] = 0;
image[i+width+1] = 0; image[i+width+2] = 0; image[i+2*width+1] = 0; image[i+2*width+2] = 0;
}


if(i % width == width - 2) //注目画素が右端から二列目なら
{
image[i+2] = 0; image[i-width+2] = 0; image[i-2*width+2] = 0 ;
image[i+width+2] = 0; image[i+2*width+2] = 0;
}



if(i >= 0 && i < width ) //注目画素が上端なら
{
image[i-2*width-1] = 0;
image[i-2*width-2] = 0;
image[i-2*width]=0;
image[i-2*width+1] = 0;
image[i-2*width+2] = 0;
image[i-width-2] = 0; image[i-width-1] = 0; image[i-width] = 0;image[i-width+1] = 0;image[i-width+2] = 0;
}


if(i >= width && i < 2*width ) //注目画素が上端なら
{
image[i-2*width-2] = 0; image[i-2*width-1] = 0; image[i-2*width]=0; image[i-2*width+1] = 0;image[i-2*width+2] = 0;
}


image[i] = 1/25 * (image[i-2*width-2] + image[i-2*width-1] + image[i-2*width] + image[i-2*width+1] + image[i-2*width+2] + image[i-width-2] + image[i-width-1] +image[i-width]
+image[i-width+1] + image[i-width+2]+ image[i-2] + image[i-1] + image[i] + image[i+1] + image[i+2] + image[i+width-2] + image[i+width-1] +image[i+width] +image[i+width+1]
+image[i+width+2] + image[i+2*width-2] + image[i+2*width-1] + image[i+2*width] + image[i+2*width+1] +image[i+2*width+2]);



}


fprintf(fo," \n");
fclose(fo);
return;
}

A 回答 (2件)

とりあえず、i == 0 のとき以下の値がいくつになるか考えてみましょう。


i-1
i-2
i-width-1
i-width-2
i-2*width-1
i-2*width-2

なお、添字関連で問題のある箇所は他にもありますのでご注意を。
    • good
    • 0
この回答へのお礼

あ・・・普通に見落としてました。
ご指摘ありがとうございます

お礼日時:2011/06/01 08:05

> image[i-width-1] = 0;    (←が出たところ)



ここで i-width-1 が マイナスになってません?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!