【发布时间】:2013-12-17 21:03:40
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int queensonboard(int n,int m)
{
int count=0,i,j,flag,x[100];
char **board;
/* board= (char**)calloc(sizeof(char*),n);
for(i=0;i<n;i++)
{
board[i]= (char*)calloc(sizeof(char),m);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%c",&board[i][j]);
}
}*/
// x==(int*)calloc(sizeof(int),n);
flag=0;
for(i=0;i<n;i++)
{
x[i]=0;
}
while(i>0)
{
while(x[i]<m)
{
x[i]++;
// if(board[i][x[i]]!='#')
// {
for(j=0;j<i;j++)
{
if(x[j]==x[i])
{
flag=1;
}
else if(x[j]-x[i]==abs(j-i))
{
flag=1;
}
else
{
flag=0;
}
}
if(flag==0 && i==n-1)
{
count++;
}
else if(flag==0)
{
i++;
}
//}
}
x[i]=-1;
i--;
}
printf("%d\n",count);
}
int main() {
int i,n,m,j;
scanf("%d",&i);
for(j=1;j<=i;j++)
{
scanf("%d %d",&n,&m);
queensonboard(n,m);
}
return 0;
}
这是代码。该程序在动态分配任何数组 x 或 board 时给出分段错误。(在此处注释。)
那是我尝试使用 calloc 进行分配的时候。 无法真正弄清楚为什么会这样。尝试改变薄,但仍然发生。
【问题讨论】:
-
你为什么要转换
calloc的返回值?你为什么注释掉相关的代码。x==(int*)calloc(sizeof(int),n)是x=(int*)calloc(sizeof(int),n)。为什么将x声明为int[100]? -
如果
calloc正在返回NULL,您应该找出原因:if (board == NULL) { perror("could not allocate board"); } -
你确定 n 和 m 不为零吗?
-
请显示您正在执行的有问题的确切代码,而不是您为不出现问题而修改的代码,并显示确切输入 您正在向程序提供。
-
@DavidHefferman:我假设
x的声明为int [100]是在int *x;和x==calloc(…);之后实施的解决方法,但没有工作。因此,问题中的代码以掩盖原始问题的方式进行了修改。
标签: c segmentation-fault