【发布时间】:2013-11-01 19:19:40
【问题描述】:
以下代码块出现分段错误。请帮助。
#include<stdio.h>
int main(){
int testcase,num;
int i,j,*array;
scanf("%d",&testcase);
for(i=0;i<testcase;i++){
scanf("%d",&num);
for(j=0;j<num;j++){
scanf("%d",(array+j));
}
}
i=0;
for(i=0;*(array+i)!='\0';i++){
printf("%d",1);
}
}
【问题讨论】:
-
因为
scanf("%d",(array+j));调用未定义的行为。array是一个不确定的指针。最后的for循环同样无效。 -
它的段错误在哪里,为什么你没有在调试器中单步执行?
-
但是这个段没有给出分段错误
-
它可以洗车、刷房子。它什么也做不了。 这是未定义行为。考虑一下:
int a;现在,a的值是多少?你不知道吗?那是因为你不知道。这是不确定的。更糟糕的是,int a; int b=a;b的值是多少?再说一次,你不知道。即使 评估a作为值也是未定义的行为。所以它也与代码中的指针一起使用。 -
@Johnsmith 那么也许你可以指出哪一行发生了段错误?