打印输出时出现分段错误

时间:2017-03-30 00:12:22

标签: c arrays segmentation-fault

我想知道c中的数组是如何工作的。所以我正在实现一些基本的数组概念。当我运行程序时,我得到了确切的输出,但在输出结束时它显示分段错误

int main(void)
{
    int a[] = {};
    printf("Enter the number:");
    int n = get_int();
    int m = 0;

    for(int i = 0; i<n; i++)
    {
        printf("insert:");
        m = get_int();
        a[i] = m;
    }

    for(int j = 0; j < n; j++)
    {
        printf("%d\n", a[j]);
    }

}

输出:

Enter the number:3
insert:1
insert:2
insert:3
1
2
3
~/workspace/ $ ./arr_test
Enter the number:5
insert:1
insert:2
insert:3
insert:4
insert:5
1
2
3
4
5
Segmentation fault

查看第一个输出,它的大小为3,它不显示segmentation fault,但是对于第二个输出,它的大小为5。那么为什么它会发生以及我犯了什么错误。

2 个答案:

答案 0 :(得分:3)

您需要为阵列分配内存。类似的东西:

int main(void)    {
   int *a;
   ...
   int n = get_int();
   ...
   a = malloc(n * sizeof(int));
   if (!a) {
      // Add error handling here
   }
   ...
}

答案 1 :(得分:1)

如果您知道要提前制作的数组的大小,请将其声明为int a[128];,而不仅仅是int a[];,因此a位于0处{ {1}}可以安全地写入(并随后从中读取)。

如果要在运行时声明大小为127的数组,请使用nint a[] = malloc(n * sizeof(int));。在使用之前确保int *a = malloc(n * sizeof(int));不是a,并且在完成后请记得致电NULL以避免内存泄漏。