为什么分段错误

时间:2013-11-01 10:58:32

标签: c pointers

以下代码块给出了分段错误。请帮忙。

 #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);
        }
        }

1 个答案:

答案 0 :(得分:5)

修改2

希望把它放在首位。

我刚注意到你的代码有点奇怪。当你读取数字时,你有一个循环超过i,然后在j内循环另一个循环 - 每次迭代你只是覆盖你已读过的值。这很奇怪,我不确定你原来的意图是什么。因此虽然segmentation fault仍然是由于未分配的数组引起的,但我在这里写的解决方案并不正确(我不知道在我明白你的意图之前,什么是正确的解决方案)< / p>

Edit2的结尾

array未初始化。

这是一个指向内存中某个地方的指针,但那个地方并不是免费的,所以当你在那里写作时,你会写出重要内容并导致分段错误。

在你的情况下解决它的最好方法是添加

array=malloc(sizeof(int)*testcase);

在您阅读testcase的行之后,就在

之后
scanf("%d",&testcase);

另外,如果你这样做,那么一旦你完成使用它,free这个记忆就是一个好习惯。所以在你的情况下添加

free(array);

在你完成整个阵列的打印之后

编辑刚刚注意到您还有另一个错误 - 在您打印数组的循环中:

for(i=0;*(array+i)!='\0';i++){

这很糟糕,因为你正在处理array,这是一个整数数组,就像它是一个字符串。 “普通”数组不会以'\0'结尾。此外 - '\0'char*(array+i)int

替换该行
for (i=0;i<testcase;i++){