array [10] vs arrray [n]和分段错误

时间:2017-06-20 02:38:49

标签: c arrays

我是一个绝对的初学者,我有一个混乱,我无法指出。这是两个C程序

计划1.

for sum of array of big integers

计划2.

program for same

两个程序都是相同的,除了2 a [n]用于代替[10] in 1,两者都没有在devc ++编译器中显示任何错误,但是为什么hackerrank第二个程序带有[n]显示&# 34;分段错误"而程序1是正确的

"分段错误"为什么它出现在第二个程序中以及为什么devc ++没有显示这个错误?

3 个答案:

答案 0 :(得分:1)

在第二种情况下,n的值未初始化。它必须具有一些随机值。所以你试图制作一个随机值的可变长度数组。 在这种情况下分割错误的原因:

  • 制作未初始化大小的可变长度数组

现在想象当我说n的随机值。它可能是负面的,非常大......等等。因此,制作具有未初始化大小的可变长度数组是不好的做法,因此导致分段错误。

  

什么是分段错误?

分段错误意味着您的程序正在尝试访问不允许的内存区域。关于这个topis的一篇好文章是this。仔细阅读并将您的问题与提到的第四个原因联系起来。

答案 1 :(得分:0)

通常,当您尝试访问内存位置时会发生分段错误,您不应该这样做。

program 2数组中声明为a[n],其中n是变量并且未初始化使用。变量n在声明之后使用,未初始化。程序无法确定应该为阵列分配多少内存。您在首次使用n)后初始化a[n]

因此,当您尝试访问数组的元素(以查找总和)时,程序正在尝试访问它不应该访问的内存位置。这就是分段错误发生的地方..

要解决此问题,请使用值初始化n或将n中的a[n]替换为值。

答案 2 :(得分:-1)

分段错误意味着数组超出范围。换句话说,程序试图操纵或访问未为变量保留的数据区域。当引用声明数组之外的地址时,它与Java ArrayIndexOutOfBoundsException相同。

在程序2中,a[n]没有为程序稍后尝试存储的变量声明空间,因此存在分段错误。