普通にビルドも出来て、
プログラムも、やって欲しい処理は全て行われて、
最後に、
「このプログラムは不正な処理を行ったので強制終了されます」
って出るんですけど、
どういう原因が考えられるんでしょうか?
初心者なんで、初歩的な質問ですいません。
参考になるかもしれないので、一応プログラムも載せておきます。
「「1」か「0」を入力して、周りの状況により変化していくと言うものです」
#include <stdio.h>
#define MAX 6 /*正方形の1辺の個数*/
#define TIMES 3 /*ゲームを繰り返す回数*/
void d_or_a(int [][MAX],int [][MAX],int,int);
void main(void)
{
int cell1[MAX][MAX]; /*処理前のセル*/
int cell2[MAX][MAX]; /*処理後のセル*/
int i,j,q; /*forのカウンタ*/
for (i=1 ; i<MAX-1 ; i++){ /*MAX×MAXを仮入力*/
for (j=1 ; j<MAX-1 ; j++){
printf(cell[%d][%d] :,i,j);
scanf(%d,&cell1[i][j]);
}
}
for (i=0 ; i<MAX ; i++){cell1[i][0]=0;} /*周囲は0と仮定する*/
for (i=0 ; i<MAX ; i++){cell1[i][MAX]=0;}
for (j=0 ; j<MAX ; j++){cell1[0][j]=0;}
for (j=0 ; j<MAX ; j++){cell1[MAX][j]=0;}
for (i=0 ; i<MAX ; i++){ /*cell1の値をcell2にコピー*/
for (j=0 ; j<MAX ; j++){
cell2[i][j] = cell1[i][j];
}
}
printf(\n);
for (i=1 ; i<MAX-1 ; i++){ /*最初の状態を表示*/
for (j=1 ; j<MAX-1 ; j++){
printf(%d ,cell1[i][j]);
}
printf(\n);
}
printf(\n);
for (q=0 ; q<TIMES ; q++){ /*ゲームを繰り返す回数*/
for (i=1 ; i<MAX-1 ; i++){
for (j=1 ; j<MAX-1 ; j++){
d_or_a(cell1,cell2,i,j);
}
}
for (i=1 ; i<MAX-1 ; i++){ /*2度目の状態を表示*/
for (j=1 ; j<MAX-1 ; j++){
printf(%d ,cell2[i][j]);
}
printf(\n);
}
printf(\n);
for (i=0 ; i<MAX ; i++){ /*cell2の値をcell1にコピー
*/
for (j=0 ; j<MAX ; j++){
cell1[i][j] = cell2[i][j];
}
}
}
}
void d_or_a(int z[][MAX],int w[][MAX],int x,int y)
{
int k; /*aliveを数えるカウンタ*/
int l,m; /*forのカウンタ*/
int p; /*zの初期値*/
int *pa;
pa=z[x];
p=*(pa+y);
if(p==0){ /*対象セルがdeadの時*/
k=0;
for(l=x-1 ; l<x+2 ; l++){
for(m=y-1 ; m<y+2 ; m++){
if(z[l][m]==1){
k=k+1;
}
}
}
if(k==3){
w[x][y]=1;
}
}
else{ /*対象セルがaliveの時*/
k=-1;
for(l=x-1 ; l<x+2 ; l++){
for(m=y-1 ; m<y+2 ; m++){
if(z[l][m]==1){
k=k+1;
}
}
}
if(k==0 || k==1 || k==4 || k==5 || k==6 || k==7 || k==8){
w[x][y]=0;
}
}
}
for (i=0 ; i<MAX ; i++){cell1[i][MAX]=0;}
ここだと思いますが?cell1[i][MAX]をcell1[i][MAX-1]
もう一箇所も。。。
> for (j=0 ; j<MAX ; j++){cell1[MAX][j]=0;}
cell1[MAX][j]=0; ではなく cell1[MAX-1][j]=0;
配列の扱いを誤るとこんな状況になります。
ありがとうございました。
無事解決しました。