C语言 打印输出时出现分段错误



我试图知道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("%dn", 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,它显示。 那么为什么会发生以及我犯了什么错误。

您需要为数组分配内存。 像这样:

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

如果您提前知道要创建的数组的大小,请像int a[128];一样声明它,而不仅仅是int a[];这样a索引0127就可以安全地写入(并随后从中读取)。

如果要在运行时声明大小n数组,请使用int a[] = malloc(n * sizeof(int));int *a = malloc(n * sizeof(int));。在使用之前a请确保没有NULL,并记得在使用完后调用free(a);以避免内存泄漏。

相关内容

  • 没有找到相关文章

最新更新