【发布时间】:2014-04-12 16:35:45
【问题描述】:
大家好,我正在尝试做作业,但我整天都找不到程序中的致命错误。让我解释一下: 首先,你给出行数,col 然后是数组的单元格(只有“.”代表空闲空间,“*”代表地雷,都在一行中,没有空格)然后崩溃发生。
main(){
int i,col,row,count,N,M,j;
char **p;
printf("Give number of rows\n");
scanf("%d",&N);
printf("Give number of columns\n");
scanf("%d\n",&M);
p=malloc(N*sizeof(char *)); //Saving room for the array
if (p==NULL)
return -1;
for (i=0;i < N ; ++i){
p[i] = malloc (M * sizeof(char));
if (*(p+i) == NULL)
return -1;
}
for (i=0; i< N;++i){
for ( j = 0 ; j < M ;++j)
scanf("%c",&p[i][j]); //Insert "*" for mines and the rest with "."
}
for (row=1; row<= N;++row){ //Here the things get messy
for ( col = 1 ; col <= M ;++col){
if(p[row][col]=='.'){
count = 0 ;
if(p[row][col+1]=='*' && col < M)
count=count+1;
if(p[row][col-1]=='*' && col > 1)
count=count+1;
if(p[row+1][col]=='*' && row < N)
count=count+1;
if(p[row-1][col]=='*' && row > 1)
count=count+1;
if(p[row+1][col+1]=='*' && (row < N && col < M))
count=count+1;
if(p[row+1][col-1]=='*' && (row < N && col > 1))
count=count+1;
if(p[row-1][col+1]=='*' && ( row > 1 && col < M))
count=count+1;
if(p[row-1][col-1]=='*' && ( row > 1 && col > 1))
count=count+1;
printf("%d ", count);
}
printf("* ");
}
printf("\n");
}
printf("\n");
for (i=0; i< N;++i){
for ( j = 0 ; j < M ;++j)
printf("%c ",p[i][j]);
printf("\n");
}
for (i = 0 ; i <N ; ++i)
free(p[i]);
free(p);
}
【问题讨论】:
-
我不确定帮助一个人做作业是否合乎道德......老实说,所有真正的程序员都通过追踪一个段错误获得了他们的第一堂宝贵的教训,你可能不应该让人们夺走了你的这个机会
-
当然可以。 OP 明确表示这是家庭作业,说明了问题,并表现出合理的努力来提供细节。
-
提供的代码未编译。使用调试器检测问题。根据源代码和描述,我认为问题是
array out of bound -
我为此苦苦挣扎了 4 个小时,但我找不到解决方案,这就是我最终将其发布在这里的原因。如果我喜欢我的其他作业,我会对其进行调试。
-
检查
scanf的返回值。初始化所有变量。使用大括号{},即使在if等之后使用单个语句。之后开始真正寻找错误。
标签: c dev-c++ minesweeper