Segmentation fault(core dumped)
Пишу Game of Live. При заполнении массива столкнулся с ошибкой Segmentation fault(core dumped). Память вроде выделяю верно. При заполнении кажется выходит за пределы массива и выделенной памяти, однако не могу понять в чем дело.
#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <unistd.h>
#define ROWS 25
#define COLS 80
void inputMatrix(int **arr); //Заполнение двумерной матрицы. Перерисовка
void updateMatrix(int **matrix, int **matrix1); //Обновление состояние матрицы
int check_Cell(int **matrix, int n, int m); //Проверка состояние клетки. Безграничность поля. Подсчет живых соседей клетки. Возврат состояния
void replace (int **matrix, int **matrix1); // замена
int main() {
int flag = 0;
int time_milisec = 500;
int **matrix = (int **)malloc(ROWS * sizeof(int*));
int **matrix1 = (int **)malloc(ROWS * sizeof(int*));
for(int i = 0; i < ROWS; i++){
matrix[i] = (int*)malloc(COLS * sizeof(int));
matrix1[i] = (int*)malloc(COLS * sizeof(int));
}
inputMatrix(matrix);
if (freopen("/dev/tty", "r", stdin)) initscr();
nodelay(stdscr, true);
while(1){
// char ch = getch();
// if(ch == 'q') break;
usleep(time_milisec*1000);
updateMatrix(matrix, matrix1);
replace(matrix, matrix1);
}
for(int i = 0; i < ROWS; i++)
free(matrix[i]);
for(int i = 0 ;i < ROWS; i++)
free(matrix1[i]);
free(matrix);
free(matrix1);
endwin();
return flag;
}
void inputMatrix(int **matrix){
for(int i = 0; i < ROWS; i++){
for(int j = 0; j < COLS; j++){
if(i < ROWS && j < COLS)
scanf("%d ", &matrix[i][j]);
}
printf("\n");
}
}
void updateMatrix(int **matrix, int **matrix1){
for(int i = 0; i < ROWS; i++){
for(int j = 0; j < COLS; j++){
if(check_Cell(matrix, i, j) == 1)
matrix1[i][j] = 1;
else
matrix1[i][j] = 0;
if(matrix1[i][j] == 1)
printf("0");
else
printf(" ");
}
printf("\n");
}
}
void replace (int **matrix, int **matrix1){
for(int i = 0; i < ROWS; i++){
for(int j = 0; j < COLS; j++)
matrix[i][j] = matrix1[i][j];
}
}
int check_Cell(int **matrix, int n, int m){
int flag = 0;
int sumN = 0;
for(int i = n - 1; i <= n + 1; i++){
for(int j = m - 1; j <= m + 1; j++) {
if(i == n && j == m)
continue;
int ii = 0;
int jj = 0;
if(i == -1)
ii = n - 1;
else if (i == n)
ii = 0;
else
ii = i;
if(j == -1)
jj = m - 1;
else if(j == m)
jj = 0;
else
jj = j;
if(matrix[ii][jj] == 1)
sumN++;
}
}
int state = matrix[n][m];
if(state == 1){
if((sumN > 2 || sumN < 3) && state == 1) {
flag = 1;
}
} else {
if(sumN == 3 && state == 0)
flag = 1;
}
return flag;
}