다음은 게임 "광산"과 유사한 그리드 생성을위한 코드입니다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int nr, nc, ** mtx, i, j;
//Matrix costruction
FILE * inStr;
inStr = fopen("brasa.dat","r");
if(inStr == NULL){
printf("\nProblem while opening the file.\n");
return 1;
}
fscanf(inStr, "%d%d", &nr, &nc);
mtx = (int**) malloc(nr * sizeof(int*));
if(mtx == NULL){
printf("\nMemory allocation error.\n");
return 1;
}
else{
for(i = 0; i < nr; i++)
mtx[i] = (int*) malloc(nc * sizeof(int));
if(mtx[i] == NULL){
printf("\nMemory allocation error.\n");
return 1;
}
}
//Filling matrix
for(i = 0; i < nr; i++){
for(j = 0; j < nc; j++)
mtx[i][j] = 0;
}
while(!feof(inStr)){
fscanf(inStr,"%d %d",&i,&j);
mtx[i][j] = 9;
}
fclose(inStr);
for(i = 0; i < nr; i++){
for(j = 0; j < nc; j++){
if(i == 0){
if(j == 0){
if(mtx[i][j+1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j+1] > 8)
mtx[i][j]++;
}
else if(j == nc-1){
if(mtx[i][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j] > 8)
mtx[i][j]++;
}
else{
if(mtx[i][j-1] > 8)
mtx[i][j]++;
else if(mtx[i][j+1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j+1] > 8)
mtx[i][j]++;
}
}
else if(i == nr-1){
if(j == 0){
if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j+1] > 8)
mtx[i][j]++;
else if(mtx[i][j+1] > 8)
mtx[i][j]++;
}
else if(j == nc-1){
if(mtx[i][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j] > 8)
mtx[i][j]++;
}
else{
if(mtx[i][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j+1] > 8)
mtx[i][j]++;
else if(mtx[i][j+1] > 8)
mtx[i][j]++;
}
}
else if(j == 0){
if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j+1] > 8)
mtx[i][j]++;
else if(mtx[i][j+1] > 8)
mtx[i][j]++;
else if(mtx[i-1][j+1] > 8)
mtx[i][j]++;
else if(mtx[i-1][j] > 8)
mtx[i][j]++;
}
else if(j == nc-1){
if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i][j-1] > 8)
mtx[i][j]++;
else if(mtx[i-1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i-1][j] > 8)
mtx[i][j]++;
}
else{
if(mtx[i-1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j-1] > 8)
mtx[i][j]++;
else if(mtx[i+1][j] > 8)
mtx[i][j]++;
else if(mtx[i+1][j+1] > 8)
mtx[i][j]++;
else if(mtx[i][j+1] > 8)
mtx[i][j]++;
else if(mtx[i-1][j+1] > 8)
mtx[i][j]++;
else if(mtx[i-1][j] > 8)
mtx[i][j]++;
}
if(mtx[i][j] > 8)
printf("*\t");
else
printf("%d\t", mtx[i][j]);
}
}
free(mtx);
return 0;
}
프로그램 실행 중에 분할 오류가 나타납니다. 몇 번의 테스트를 해보니 문제가 85 번 줄과 158 번 줄 사이에 있어야한다는 것을 알았습니다. 도와 줄 수 있나요?
잘못된 액세스 권한이 있습니다.
// ...
else if(i == nr-1){ // i is nr - 1
if(j == 0){
// ...
}
else if(j == nc-1){
// ...
else if(mtx[i+1][j] > 8) // i + 1 is nr (invalid access)
// ...
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다