嘿伙计们正在研究这个项目。它希望我找到字谜。我写的代码就像2个句子一样。但是如果我写了更多的句子然后它就会显示出一个分段错误。我试图找到问题,但我无法弄明白。有人可以帮我查一下吗?这是我的代码。非常感谢!
int klinkercheck(char z)
{
if (z =='a')
return 1000;
else if (z == 'e')
return 10000;
else if (z == 'i')
return 100000;
else if (z == 'o')
return 1000000;
else if (z == 'u')
return 10000000;
else if (z == 10)
return 0;
else if (z == '.' || z== ' ')
return 0;
else
return 1;
}
int main()
{
int a,k,i,m,l,*tablecost,*testcost;
int **table, **test, **result;
char character;
scanf("%d",&a);
table = (int **)malloc(sizeof(int)*a);
tablecost = (int *)malloc(sizeof(int)*a);
for(k=0; k<a; k++) {
table[k]= (int *)malloc(sizeof(int)*26);
/*printf("tablecost = %d",tablecost[k]);*/
}
for(k=0; k<a; k++) {
for(i=0; i<2; i=i) {
scanf("%c",&character);
tablecost[k]= tablecost[k]+klinkercheck(character);
if(character=='.') {
/*printf("%d\n",k);*/
break;
} else if(character < 97) {
/* do nothing*/
} else {
table[k][character%97]++;
}
}
}
scanf("%d",&m);
test = (int **)malloc(sizeof(int)*m);
result = (int **)malloc(sizeof(int)*m);
testcost = (int *)malloc(sizeof(int)*m);
for(k=0; k<m; k++) {
test[k]= (int *)malloc(sizeof(int)*26);
result[k] = (int *)malloc(sizeof(int)*a);
}
for (k = 0 ; k < m ; k++) {
testcost[k]=0;
for(i=0; i<20; i=i) {
scanf("%c",&character);
testcost[k] =testcost[k]+klinkercheck(character);
if(character=='.') {
break;
} else if(character < 97) {
/* do nothing*/
} else {
test[k][character%97]++;
}
}
}
for (i = 0 ; i < m ; i++) {
for (k = 0 ; k < a ; k++) {
if (testcost[i] == tablecost[k]) {
for (l = 0 ; l < 26 ; l++) {
if (test[i][l] != table[k][l]) {
break;
} else if (l == 25) {
printf("%d ", k + 1);
}
}
}
}
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
table = (int **)malloc(sizeof(int)*a);
应该是
table = malloc(sizeof(int *)*a);
以及
test = malloc(sizeof(int *)*m);
result = malloc(sizeof(int *)*m);
答案 1 :(得分:0)
除非您的平台上有sizeof(int)==sizeof(int*)
行:
table = (int **)malloc(sizeof(int)*a);
会造成麻烦。使用:
table = malloc(sizeof(*table)*a);
注意:老男孩在投掷malloc()
的回报时会变得通风。