2013-03-19 62 views
0

我在学习数组,只是写了这个小程序,看看它是如何工作的。但它与分割faul崩溃,我明白我的意思是我写我的变量/函数的内存地方没有分配给它。但我不知道如何。任何人都可以让我知道吗? 我从我的main()调用introArray。C Array程序崩溃,出现分段错误

int introArray (void) 
{ 
    int total, ctr; 

    printf("enter how many students \n"); 
    scanf("%d", &total); 

    int students[total]; 
    ctr = 0; 

    while (students[ctr] <= total) 
    { 
     printf("enter student %d DOB in mmddyy \n", ctr); 
     scanf("%d", students[ctr]); 
     ctr++; 
    } 

    return 0; 

}

+0

哪个编译您使用的是建立这个程序缺失? – Ganesh 2013-03-19 22:49:33

回答

0

ctr超越total。这样,你出去的绑定 循环更改为

while (ctr < total) 
{ 
     printf("enter student %d DOB in mmddyy \n", ctr); 
     scanf("%d", &(students[ctr])); 
     ctr++; 
} 
0

此行

while (students[ctr] <= total) 

不是针对阅读过去的循环中的数组边界保护。这会阻止你读书你过去的数组的结尾,只要你使用ctr作为你的索引

while (ctr < total) 

需要严格的不平等数组的索引是从零开始的。

另外,你的while循环中的scanf调用是错误的 - 第二个参数应该是一个指针,并且当前你传递一个整数。它应该是

scanf("%d", &students[ctr]); 
0

我觉得

scanf("%d", students[ctr]); 

应该

scanf("%d", &students[ctr]); 
+1

@Armin只有第二个是正确的。在第一个片段中,scanf会尝试在地址students [ctr]处写入,这是一些垃圾值(或者可能为零,取决于编译器)。在第二个片段中,scanf将写入学生数组的ctr元素的地址,这是正确的。 – 2013-03-19 22:55:45

+0

@AaronGolden Tnx,我不知道为什么我在那里看到%s。我删除了评论... – 2013-03-19 22:59:36

2

在代码中,有一个实现逻辑问题。学生总数为total,因此,您while回路应

while(ctr < total) 

要还读出的数据应该scanf("%d", &students[ctr]);有一个符号

+0

感谢ganesh。我进行了推荐的更改,并且仍然发生相同的segementation故障错误。任何想法为什么?另外,为什么在我用[]解除引用时需要&符号? – user2152138 2013-04-01 18:30:21

+0

@ user2152138如果您还没有使用_ampersand_,那么您的代码可能会崩溃。当你将一个数组元素解引用为'students [ctr]'时,你实际上正在访问相应的值。然而,你的目标是通过'scanf'读取一个值,为此你需要传递元素的'地址'。因此,你应该使用'&学生[ctr]'。 – Ganesh 2013-04-01 23:41:48