ビジュアルスタジオ 実行エラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
福猫

ビジュアルスタジオ 実行エラー

#1

投稿記事 by 福猫 » 5年前

ビジュアルスタジオ2010 のプログラムを実行すると
下記のエラーがでます。
game.exe の 0x001cfc80 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x002440bd に書き込み中にアクセス違反が発生しました。


初心者で、一体どうすれば解決するのかわからず困っています。
どなたかご教授ください。

プログラムの内容は以下の通りです。



#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "glut.h"

GLubyte pict[64][64][3];
int wide,height;
int pad,h,w,r,g,b,k,j,hd[54];
int rotx=45, roty=0, rotz=0;
int s=0;

static GLuint texName;
GLfloat mat_ambient[]={1.0,1.0,0.0,1.0};
GLfloat mat_diffuse[]={1.0,1.0,1.0,1.0};
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={50.0};
GLfloat light_position[]={20.0,30.0,30.0,0.0};

FILE *fp;

void init(void)
{
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
glEnable(GL_NORMALIZE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}

void bmp_files(void)
{

char tex_file[20]="meibamen.bmp";
fp=fopen(tex_file,"rb");
if(fp==NULL){
printf("Can't open <<%s>>.\n",tex_file); exit(1);
}

for(k=0; k<54; k++){
hd[k]=fgetc(fp);
}
if(hd[0]!='B' && hd[1]!='M'){
printf("ビットマップではありません。\n");
exit(1);
}

wide=hd[18]+hd[19]*256+hd[20]*65536+hd[21]*16777216;
height=hd[22]+hd[23]*256+hd[24]*65536+hd[25]*16777216;
pad=wide%4;
for(h=height-1; h>=0; h--){
for(w=0;w<wide;w++){
b=fgetc(fp);
g=fgetc(fp);
r=fgetc(fp);
pict[w][h][0]=(GLubyte)r;
pict[w][h][1]=(GLubyte)g;
pict[w][h][2]=(GLubyte)b;
}
for(j=0;j<pad;j++) fgetc(fp);
}
fclose(fp);
}
void texture()
{
bmp_files();
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glGenTextures(1,&texName);
glBindTexture(GL_TEXTURE_2D,texName);
glTexImage2D(GL_TEXTURE_2D,0,3,wide,height,0,
GL_RGB,GL_UNSIGNED_BYTE,pict);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,
GL_CLAMP);

glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,
GL_CLAMP);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,
GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,
GL_DECAL);

}


void wall(double L,double H,double W)
{
texture();
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(1.0,0.0);
glVertex3d(L,0.0,0.0);
glTexCoord2f(1.0,1.0);
glVertex3d(L+W,0.0,0.0);
glTexCoord2f(0.0,1.0);
glVertex3d(L+W,H,0.0);
glTexCoord2f(0.0,0.0);
glVertex3d(L,H,0.0);

glEnd();


glDisable(GL_TEXTURE_2D);
}


void modeldraw(void)
{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);

glPushMatrix();
glRotatef((double)rotx,1.0,0.0,0.0);
glRotatef((double)roty,0.0,1.0,0.0);
glRotatef((double)rotz,0.0,0.0,1.0);

glPushMatrix();
glTranslated(0.0,0.0,1.0);
wall(-1.0,2.0,2.0);
glPopMatrix();

glPushMatrix();
glRotatef(90.0,0.0,1.0,0.0);
glTranslated(0.0,0.0,1.0);
wall(-1.0,2.0,2.0);
glPopMatrix();


glPushMatrix();
glRotatef(-90.0,0.0,1.0,0.0);
glTranslated(0.0,0.0,1.0);
wall(-1.0,2.0,2.0);
glPopMatrix();


glPushMatrix();
glRotatef(180.0,0.0,1.0,0.0);
glTranslated(0.0,0.0,1.0);
wall(-1.0,2.0,2.0);
glPopMatrix();

glPopMatrix();

glutSwapBuffers();
glFlush();

}

void key_press(unsigned char key, int x,int y)
{

switch(key){
case 'x':
rotx=(rotx+5)%360;
glutPostRedisplay();
break;


case 'X':
rotx=(rotx-5)%360;
glutPostRedisplay();
break;


case 'y':
roty=(roty+5)%360;
glutPostRedisplay();
break;

case 'Y':
roty=(roty-5)%360;
glutPostRedisplay();
break;


case 'z':
rotz=(rotz+5)%360;
glutPostRedisplay();
break;




case 'Z':
rotz=(rotz-5)%360;
glutPostRedisplay();
break;


case 27:exit(0);

}

}


void reshape(int wide,int height)
{
glViewport(0,0,wide,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0,(GLfloat)wide/(GLfloat)height,1.0,20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
}

int main(void)
{
init();
glutInitDisplayMode(2|0|16);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("テクスチャマッピング");

glutReshapeFunc(reshape);
glutKeyboardFunc(key_press);
glutDisplayFunc(modeldraw);

glutMainLoop();

return 0;

}

補足
デバッグしたところ
pict[w][h][0]=(GLubyte)r;
pict[w][h][1]=(GLubyte)g;
pict[w][h][2]=(GLubyte)b;

ここで止まっているようなんですが・・・

アバター
へにっくす
記事: 628
登録日時: 7年前
住所: 東京都

Re: ビジュアルスタジオ 実行エラー

#2

投稿記事 by へにっくす » 5年前

福猫 さんが書きました:ここで止まっているようなんですが・・・
そのときのwとhをウォッチで見ましたか?
pict[64][64][3]の範囲に収まってますか?
オフトピック
コードを掲示するときは、[code][/code]で囲ってくださいね。
written by へにっくす

福猫

Re: ビジュアルスタジオ 実行エラー

#3

投稿記事 by 福猫 » 5年前

Re::へニックス様

画像のサイズを変更したら実行できました!!!
ありがとうございました!!

閉鎖

“C言語何でも質問掲示板” へ戻る