0

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

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

1 回答 1

5

编辑 2

想把这个放在上面。

我刚刚注意到你的代码有点奇怪。当您读取数字时,您有一个循环i,但j内部有另一个循环 - 每次迭代您只需覆盖您已经读取的值。这很奇怪,我不确定你的初衷是什么。所以虽然segmentation fault仍然是由于未分配的数组引起的,但我在这里写的解决方案不是正确的(在我理解你的意思之前,我不确定什么是正确的解决方案)

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++){
于 2013-11-01T11:00:38.160 回答