
学校の課題で画像処理の平均値フィルタを作っているのですが、コンパイルは通るのに実行しようとすると「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;
}
No.2ベストアンサー
- 回答日時:
とりあえず、i == 0 のとき以下の値がいくつになるか考えてみましょう。
i-1
i-2
i-width-1
i-width-2
i-2*width-1
i-2*width-2
なお、添字関連で問題のある箇所は他にもありますのでご注意を。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PNGを24bppBMPに変換したいので...
-
DOSのdirコマンドで思うように...
-
printfの%eで指数部分の桁数を...
-
バイナリとBCDコード
-
COBOLのCOMP形式について
-
cprintf()関数で2バイト文字を...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
VB.NET LeftBの代用
-
Javaで日本語1文字のバイト数
-
'dataType' 引数を Null にする...
-
COBOL PICTUREで X,S,Vの意味
-
VB6で漢字の1バイト目か2バイト...
-
ピクセル,dpiから容量(バイト...
-
utf-8でメールを送信すると件名...
-
PHPのCookieが有るか無いかで、...
-
任意のアルファベットの2進表...
-
POSTメソッドの最大容量について
-
10個の実数に対する降順ソート...
-
DataGridViewの特定列に入力さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptの条件分岐について(...
-
C言語でwin32apiを使ってnotepa...
-
PNGを24bppBMPに変換したいので...
-
エラー「書き込み中にアクセス...
-
デバイスコンテキストに書いた...
-
DOSのdirコマンドで思うように...
-
GDI+でアニメPNGの表示
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
stable diffusionのエラー
-
Excel 1セル当りの文字数が2...
-
「1TB」のHDDに日本語は何字入...
-
DataGridViewの特定列に入力さ...
-
ピクセル,dpiから容量(バイト...
-
Excel VBA メール作成について ...
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ListView重複データ削除
おすすめ情報