语句之间的神秘段错误

Mystery Segfault in between statements

完全披露:这是我有错误的家庭作业。

我收到神秘的间歇性段错误 - 就在 printf(...,pas_isin(thelist,5) 之后但在下一个 printf 之前。或者至少这就是输出所暗示的 - 我猜它可能会在 pas_isIn 内部的某个地方终止并且 STDOUT 没有被刷新。

printf("\n\nTesting isIn with 5 - should return 1");
printf("\npas_isIn returned %i",pas_isIn(thelist,5));

printf("\n\nTesting isIn with 10000 - should return 0");
printf("\npas_isIn returned %i",pas_isIn(thelist,10000));

这是pas_isIn()

//returns true if the given list contains the given value
int pas_isIn(int thelist[], int x) {
    int t;
    int length;
    //empty list dont' contain much of anything
    if (pas_isEmpty(thelist)) { return 0; }
    for (t=1; t <= length; t++) {
        if (thelist[t]==x) { return 1; }
    }
    return 0;
}

列表是一个数组,分配大小为 50,在调用时包含大约四个值。列表中的第一个值是数组中值的数量。有什么想法吗?

length 没有在您的代码中初始化,您似乎将数组的长度存储在它的第一个元素中,所以应该这样做

//returns true if the given list contains the given value
int pas_isIn(int thelist[], int x) {
    int t;
    int length;
    length = thelist[0];
    //empty list dont' contain much of anything
    if (pas_isEmpty(thelist)) { return 0; }
    for (t=1; t <= length; t++) {
        if (thelist[t]==x) 
            return 1;
    }
    return 0;
}

int 类型的未初始化变量可以包含任何值,它对于您的 thelist 数组来说可能太大了。