Conway의 C of Life in Life를 재 작성하는 과제가 있습니다. 다음 코드에서 2D의 주어진 좌표에 이웃이 있는지 확인하려고합니다. "canGoUP"또는 "canGoDown"등은이 2 차원 어레이의 에지 근처 좌표가 확인하여 세그먼테이션 폴트 (segfault) 방지라는C에서 Game of Life를 재현 할 때 이웃 사람의 상태 확인
int checkNeighbor(int i, int j, cell field[i][j]) {
int sum=0;
if(canGoUp(i) && canGoLeft(j) && (field[i-1][j-1].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && (field[i-1][j].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && canGoRight(j) && (field[i-1][j+1].current == ALIVE)) {
sum++;
}
if(canGoRight(j) && (field[i][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoRight(j) && (field[i+1][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && (field[i+1][j].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoLeft(j) && (field[i+1][j-1].current == ALIVE)) {
sum++;
}
if(canGoLeft(j) && (field[i][j-1].current == ALIVE)) {
sum++;
}
return sum;
}
기능 : -array 죽거나 ALIVE 상태를 갖는다. 자, 어떤 이유로 코드가 거의 완벽하게 작동하지 않습니다. 나는 이웃 사람의 표시를 얻는다 그러나 그것은 나에게 적당한 양을 거의 이야기하지 않는다. 문제를 해결할 더 좋은 방법이 있습니까? 아니면 코드에서 뭔가를 놓친 적이 있습니까?
'cell field [i] [j]'는'cell field [rows] [cols]'이어야합니다. – user3386109
for-loop에서 checkNeighbor 함수를 사용한다고 언급 했어야합니다. 그렇게하면 모든 좌표를 살펴보고 각각의 좌표를 확인할 수 있습니다. 그래서 행과 열이 i와 j로 표시됩니다. – Crocus
네, 그렇지만 컴파일러에게'field' 배열의 크기가 얼마나 큰지 알려줄 필요가 있습니다. 'i'와'j'가 0 일 때, 배열이 0x0 엔트리라는 것을 컴파일러에게 알려줍니다. 그러나 실제로 어레이에는 고정 크기가 있습니다. 명확하지 않은 경우 함수의 서명'int checkNeighbor (int i, int j, cell field [i] [j])'를'int checkNeighbor (int i, int j, cell field [rows] [cols])'를 호출합니다. 함수의 몸체는 괜찮습니다. – user3386109