语句之间的神秘段错误
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
数组来说可能太大了。
完全披露:这是我有错误的家庭作业。
我收到神秘的间歇性段错误 - 就在 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
数组来说可能太大了。