「不正な処理」ってなんですか? – プログラミング – Home

「不正な処理」ってなんですか?
 
通知
すべてクリア

[解決済] 「不正な処理」ってなんですか?


けんけん
 けんけん
(@けんけん)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

普通にビルドも出来て、
プログラムも、やって欲しい処理は全て行われて、
最後に、
「このプログラムは不正な処理を行ったので強制終了されます」
って出るんですけど、
どういう原因が考えられるんでしょうか?
初心者なんで、初歩的な質問ですいません。

参考になるかもしれないので、一応プログラムも載せておきます。
「「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;
}
}
}


引用未解決
トピックタグ
テン
 テン
(@テン)
ゲスト
結合: 23年前
投稿: 35
 

for (i=0 ; i<MAX ; i++){cell1[i][MAX]=0;}
ここだと思いますが?cell1[i][MAX]をcell1[i][MAX-1]


返信引用
sara
 sara
(@sara)
ゲスト
結合: 23年前
投稿: 99
 

もう一箇所も。。。
> for (j=0 ; j<MAX ; j++){cell1[MAX][j]=0;}
 cell1[MAX][j]=0; ではなく cell1[MAX-1][j]=0;

 配列の扱いを誤るとこんな状況になります。


返信引用
けんけん
 けんけん
(@けんけん)
ゲスト
結合: 23年前
投稿: 11
Topic starter  

ありがとうございました。
無事解決しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました