はじめまして、質問なのですが
#include <stdio.h>
#include <stdlib.h>
#define MS 200
void ellipse(unsigned char *, int, int, double, double, int, int, int);
void triangle(unsigned char *, double, double, double, double, int, int, int);
int save(unsigned char *);
main()
{
unsigned char *bmp;
bmp = (unsigned char *)malloc(MS*MS*3);
triangle (bmp, -100, 0, 200, 100, 0, 255, 0);
ellipse (bmp, 0, 0, 20, 100, 255, 0, 0);
ellipse (bmp, 0, 0, 100, 20, 255, 0, 0);
if ( save( bmp ) ) exit(1);
}
int save(unsigned char *bmp)
{
char fi[50];
FILE *fp;
unsigned short header[13] = {0x4d42, 54490, 1, 0, 0, 26, 0, 12, 0, 200, 200,
1, 24};
printf(Input file name:);
scanf(%s, fi);
if((fp = fopen(fi, wb)) == NULL) {
fprintf( stderr, Error:file open [%s].\n,fi);
return 1;
}
fwrite(header, 2, 13, fp);
fwrite(bmp, 1, MS*MS*3, fp);
fclose(fp);
return 0;
}
void ellipse(unsigned char *bmp, int x0, int y0, double a, double c, int r,
int g, int b)
{
int i, j, x, y;
for (i = 0 ; i < MS ; i ++)
{
y = i-MS/2;
for (j = 0 ; j < MS ; j ++)
{
x = j-MS/2;
if( (x-x0)*(x-x0) / (a*a) + (y-y0)*(y-y0) / (c*c) <= 1 )
{
bmp[(i*MS+j)*3+0]=b;
bmp[(i*MS+j)*3+1]=g;
bmp[(i*MS+j)*3+2]=r;
}
}
}
}
void triangle(unsigned char *bmp, double x0, double y0, double w, double h,
int r, int g, int b)
{
int i, j;
for (i = y0 ; i < y0+h ; i ++)
{
for (j = i*w/h/2-y0*w/h/2+x0 ; j < w/2 ; j ++)
{
→bmp[(i*MS+j)*3+0]=b;
bmp[(i*MS+j)*3+1]=g;
bmp[(i*MS+j)*3+2]=r;←
}
}
}
としてコンパイルしたときに、起動はするのですが「問題が発生しました」と出て強制
終了されてしまいます。コメントアウトをして、上の→~←の部分に問題があるとわか
ったのですがそれが何故いけないのか解りません。
どなたか知恵を貸していただけないでしょうか・・・
bmp[a]
このaの値がマイナスになったり大きすぎたりしたんじゃないの。
デバッグすればいいのに。
デバッガでステップ実行とかすれば変数の値とか見れるし。
あるいはAssertするとか。
たとえば以下みたいに。
a = (i*MS+j)*3;
if(a < 0) MessageBox~
if(a+2 >= MS*MS*3) MessageBox~
bmp[a+0]=b;
bmp[a+1]=g;
bmp[a+2]=r;
解決しました!
本当にありがとうございました~。