Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

game of life crashing

Name: Anonymous 2010-06-07 16:25

Hello, /prog/,
game of life, doesn't run if the height of the grid is > than width. It crashes when creating a border.. I just don't know anymore.

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

void border(int height, int width, int **grid)
{
    int i, j;
    i = 0;
        for(j=0;j< height;j++)
        {
            *(*(grid+i)+j) = '0';
        }
    j = 0;
        for(i=0;i< (width-1);i++)
        {
            *(*(grid+i)+j) = '0';
        }
    i = (width-1);
        for(j=0;j< height;j++)
        {
            *(*(grid+i)+j) = '0';
        }
    j = (height-1);
        for(i=0;i< (width-1);i++)
        {
            *(*(grid+i)+j) = '0';
        }
}

void print(int **grid, int width, int height)
{
    int i, j;
    for(i=0;i< width;i++)
    {
        for(j=0;j< height;j++)
        {
            printf("%c",*(*(grid+i)+j));
        } printf("\n");
    }
}

void play(int width, int height, int **grid, int **grid2)
{
    int i, j, live=0,dead=0;
        for(i=1;i< (width-1);i++)
     {
        for(j=1;j< (height-1);j++)
        {
                printf("%c",*(*(grid+i)+j));
        } printf("\n");
     }
    for(i=1;i< (width-1);i++)
     {
        for(j=1;j< (height-1);j++)
        {
                if ( *(*(grid+i)+(j-1)) == '0')
                    ++dead;
                if ((*(*(grid+i)+(j+1))) == '0')
                    ++dead;
                if ((*(*(grid+(i-1))+(j-1))) == '0')
                    ++dead;
                if ((*(*(grid+(i-1))+j)) == '0')
                    ++dead;
                if ((*(*(grid+(i-1))+(j+1))) == '0')
                    ++dead;
                if ((*(*(grid+(i+1))+(j-1))) == '0')
                    ++dead;
                if ((*(*(grid+(i+1))+j)) == '0')
                    ++dead;
                if ((*(*(grid+(i+1))+(j+1))) == '0')
                    ++dead;

                if ( *(*(grid+i)+(j-1)) == '*')
                    ++live;
                if ((*(*(grid+i)+(j+1))) == '*')
                    ++live;
                if ((*(*(grid+(i-1))+(j-1))) == '*')
                    ++live;
                if ((*(*(grid+(i-1))+j)) == '*')
                    ++live;
                if ((*(*(grid+(i-1))+(j+1))) == '*')
                    ++live;
                if ((*(*(grid+(i+1))+(j-1))) == '*')
                    ++live;
                if ((*(*(grid+(i+1))+j)) == '*')
                    ++live;
                if ((*(*(grid+(i+1))+(j+1))) == '*')
                    ++live;

                if (*(*(grid+i)+j) == '0' && live == 3)
                    *(*(grid2+i)+j) = '*';
                else *(*(grid2+i)+j) = '0';
                if (*(*(grid+i)+j) == '*' && live < 2 )
                    *(*(grid2+i)+j) = '0';
                if (*(*(grid+i)+j) == '*' && live > 3 )
                    *(*(grid2+i)+j) = '0';
                if (*(*(grid+i)+j) == '*' && (live == 3 || live == 2) )
                    *(*(grid2+i)+j) = '*';
            live = 0; dead = 0;
        }
     }
     system("pause");
     system("cls");
}


void main(void) {
    FILE *filas;
    int width = 0,a;
    int height = 0;
    int **grid, **grid2, i=1, j=1;
    int line[100]={};
    char newl, c;
    if((filas=fopen("grid.txt","r"))==NULL)
    {
        printf("err\n"); exit(1);
    }

    fgets(line, 100, filas);
    width = strlen(line)+1;
    rewind(filas);
    do {
        newl = getc(filas);
        if ( newl == '\n' )
        height++;
    } while ( newl != EOF);
    rewind(filas);
    height = height + 3;

    a=height;
    height=width;
    width=a;

   if((grid = (int**)malloc((sizeof(int*))*(width))) == NULL)
        exit(EXIT_FAILURE);
    for( i = 0 ; i < height ; i++ )
        if((*(grid+i) = (int*)malloc(sizeof(int)*(height))) == NULL)
            exit(EXIT_FAILURE);

    if((grid2 = (int**)malloc((sizeof(int*))*(width))) == NULL)
        exit(EXIT_FAILURE);
    for( i = 0 ; i < height ; i++ )
        if((*(grid2+i) = (int*)malloc(sizeof(int)*(height))) == NULL)
            exit(EXIT_FAILURE);
i = 1; j = 1;
     do
     {
         c = getc(filas);

         if ( c != 10 && c != EOF )
         {
             *(*(grid+i)+j) = c;
             printf("i-%d : j-%d %c\n",i, j, *(*(grid+i)+j) );
                if ( i< (width-1) )
                    if ( j< (height-2) )
                        j++;
                    else
                    {
                        j=1;
                        i++;
                    }
         }
     }while (c!=EOF);
     printf("\n\n\n\n\n\n");
//border
    border(height, width, grid);
    border(height, width, grid2);
print(grid, width, height);
printf("\n\n\n");
//play
    do{
    play(width, height, grid, grid2);
    play(width, height, grid2, grid);
    } while(1);
}

Name: Anonymous 2010-06-07 17:06

>>7


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

void border(int height, int width, int **grid) {
    int i, j;
    i = 0;
    for (j = 0; j < height; j++) {
        *(*(grid + i) + j) = '0';
    }
    j = 0;
    for (i = 0; i < (width - 1); i++) {
        *(*(grid + i) + j) = '0';
    }
    i = (width - 1);
    for (j = 0; j < height; j++) {
        *(*(grid + i) + j) = '0';
    }
    j = (height - 1);
    for (i = 0; i < (width - 1); i++) {
        *(*(grid + i) + j) = '0';
    }
}

void print(int **grid, int width, int height) {
    int i, j;
    for (i = 0; i < width; i++) {
        for (j = 0; j < height; j++) {
            printf("%c", *(*(grid + i) + j));
        }
        printf("\n");
    }
}

void play(int width, int height, int **grid, int **grid2) {
    int i, j, live = 0, dead = 0;
    for (i = 1; i < (width - 1); i++) {
        for (j = 1; j < (height - 1); j++) {
            printf("%c", *(*(grid + i) + j));
        }
        printf("\n");
    }
    for (i = 1; i < (width - 1); i++) {
        for (j = 1; j < (height - 1); j++) {
            if (*(*(grid + i) + (j - 1)) == '0')
                ++dead;
            if ((*(*(grid + i) + (j + 1))) == '0')
                ++dead;
            if ((*(*(grid + (i - 1)) + (j - 1))) == '0')
                ++dead;
            if ((*(*(grid + (i - 1)) + j)) == '0')
                ++dead;
            if ((*(*(grid + (i - 1)) + (j + 1))) == '0')
                ++dead;
            if ((*(*(grid + (i + 1)) + (j - 1))) == '0')
                ++dead;
            if ((*(*(grid + (i + 1)) + j)) == '0')
                ++dead;
            if ((*(*(grid + (i + 1)) + (j + 1))) == '0')
                ++dead;

            if (*(*(grid + i) + (j - 1)) == '*')
                ++live;
            if ((*(*(grid + i) + (j + 1))) == '*')
                ++live;
            if ((*(*(grid + (i - 1)) + (j - 1))) == '*')
                ++live;
            if ((*(*(grid + (i - 1)) + j)) == '*')
                ++live;
            if ((*(*(grid + (i - 1)) + (j + 1))) == '*')
                ++live;
            if ((*(*(grid + (i + 1)) + (j - 1))) == '*')
                ++live;
            if ((*(*(grid + (i + 1)) + j)) == '*')
                ++live;
            if ((*(*(grid + (i + 1)) + (j + 1))) == '*')
                ++live;

            if (*(*(grid + i) + j) == '0' && live == 3)
                *(*(grid2 + i) + j) = '*';
            else
                *(*(grid2 + i) + j) = '0';
            if (*(*(grid + i) + j) == '*' && live < 2)
                *(*(grid2 + i) + j) = '0';
            if (*(*(grid + i) + j) == '*' && live > 3)
                *(*(grid2 + i) + j) = '0';
            if (*(*(grid + i) + j) == '*' && (live == 3 || live == 2))
                *(*(grid2 + i) + j) = '*';
            live = 0;
            dead = 0;
        }
    }
    system("pause");
    system("cls");
}

void main(void) {
    FILE *filas;
    int width = 0, a;
    int height = 0;
    int **grid, **grid2, i = 1, j = 1;
    int line[100] = { };
    char newl, c;
    if ((filas = fopen("grid.txt", "r")) == NULL) {
        printf("err\n");
        exit(1);
    }

    fgets(line, 100, filas);
    width = strlen(line) + 1;
    rewind(filas);
    do {
        newl = getc(filas);
        if (newl == '\n')
            height++;
    } while (newl != EOF);
    rewind(filas);
    height = height + 3;

    a = height;
    height = width;
    width = a;

    if ((grid = (int**) malloc((sizeof(int*)) * (width))) == NULL)
        exit(EXIT_FAILURE);
    for (i = 0; i < height; i++)
        if ((*(grid + i) = (int*) malloc(sizeof(int) * (height))) == NULL)
            exit(EXIT_FAILURE);

    if ((grid2 = (int**) malloc((sizeof(int*)) * (width))) == NULL)
        exit(EXIT_FAILURE);
    for (i = 0; i < height; i++)
        if ((*(grid2 + i) = (int*) malloc(sizeof(int) * (height))) == NULL)
            exit(EXIT_FAILURE);
    i = 1;
    j = 1;
    do {
        c = getc(filas);

        if (c != 10 && c != EOF) {
            *(*(grid + i) + j) = c;
            printf("i-%d : j-%d %c\n", i, j, *(*(grid + i) + j));
            if (i < (width - 1))
                if (j < (height - 2))
                    j++;
                else {
                    j = 1;
                    i++;
                }
        }
    } while (c != EOF);
    printf("\n\n\n\n\n\n");
    //border
    border(height, width, grid);
    border(height, width, grid2);
    print(grid, width, height);
    printf("\n\n\n");
    //play
    do {
        play(width, height, grid, grid2);
        play(width, height, grid2, grid);
    } while (1);
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List