「不正な処理」ってなんですか?

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

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

テン 2002/05/05(日) 12:09:58
for (i=0 ; i<MAX ; i++){cell1[i][MAX]=0;}
ここだと思いますが?cell1[i][MAX]をcell1[i][MAX-1]

sara 2002/05/05(日) 12:32:57
もう一箇所も。。。
>   for (j=0 ; j<MAX ; j++){cell1[MAX][j]=0;}
 cell1[MAX][j]=0; ではなく cell1[MAX-1][j]=0;

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

けんけん 2002/05/05(日) 16:02:13
[[解決]]
ありがとうございました。
無事解決しました。

古いスレッドには追加発言できません。