分段故障anagram项目

时间:2015-02-11 13:46:44

标签: c

嘿伙计们正在研究这个项目。它希望我找到字谜。我写的代码就像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;
}

2 个答案:

答案 0 :(得分:1)

table = (int **)malloc(sizeof(int)*a);

应该是

table = malloc(sizeof(int *)*a);

以及

test = malloc(sizeof(int *)*m);
result = malloc(sizeof(int *)*m);

Dont cast malloc()

答案 1 :(得分:0)

除非您的平台上有sizeof(int)==sizeof(int*)行:

table = (int **)malloc(sizeof(int)*a);

会造成麻烦。使用:

table = malloc(sizeof(*table)*a);

注意:老男孩在投掷malloc()的回报时会变得通风。