请各位帮我看看这段代码(编译器没有报错,但是运行出现错误)

来源:百度知道 编辑:UC知道 时间:2024/06/22 23:48:39
#define OBJECT_R 50
#define SCREEN_WIDTH 500
#define SCREEN_HEIGHT 500
#define LOOP_DENSE 100
#define DISTANCE 50
#define I_HEIGHT 20
#define PI 3.1415926536

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

double get_object_coordinate(int n);
double random(void);
void get_screen_point(double object_x,double object_y,int& screen_x,int& screen_y,int &value);
int get_pix_tag_x(int coordinate);
int get_pix_tag_y(int coordinate);

int main()
{

int pix[SCREEN_WIDTH][SCREEN_HEIGHT];
int i=0,j=0;
double x1,y1;
int x2,y2;
int x3=0,y3=0;
int value=0;
char brg[3];
for (i=0;i<SCREEN_WIDTH;i++)
{
for (j=0;j<SCREEN_HEIGHT;j++)
{
pix[i][j]=0;
}
}
FILE *fp;

for (i=0;i<2*OBJECT_R*LOOP_DENSE;i++)<

你的程序具体干嘛的我没看,我只是查了下出错的地方

for (i=0;i<2*OBJECT_R*LOOP_DENSE;i++)
{
for (j=0;j<2*OBJECT_R*LOOP_DENSE;j++)
{
x1=get_object_coordinate(i);
y1=get_object_coordinate(j);
if (x1*x1+y1*y1<OBJECT_R*OBJECT_R)
{
get_screen_point(x1,y1,x2,y2,value);
x3=get_pix_tag_x(x2);
y3=get_pix_tag_y(y2);
if (x3>0 || x3<SCREEN_WIDTH || x3==0 || y3>0 || y3<SCREEN_HEIGHT || y3==0)
pix[x3][y3]+=value;
}
}
}
当循环进行到i=100,y=4121时, x3=611,y3=125,pix[x3][y3]+=value;这句出现非法操作,肯定是下标越界了

if (x3>0 || x3<SCREEN_WIDTH || x3==0 || y3>0 || y3<SCREEN_HEIGHT || y3==0)
是不是应该写成
if (x3>=0 && x3<SCREEN_WIDTH && y3>=0 && y3<SCREEN_HEIGHT)

你自己再看看吧。