我是一个绝对的初学者,我有一个混乱,我无法指出。这是两个C程序
计划1.
计划2.
两个程序都是相同的,除了2 a [n]用于代替[10] in 1,两者都没有在devc ++编译器中显示任何错误,但是为什么hackerrank第二个程序带有[n]显示&# 34;分段错误"而程序1是正确的
"分段错误"为什么它出现在第二个程序中以及为什么devc ++没有显示这个错误?
答案 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]
没有为程序稍后尝试存储的变量声明空间,因此存在分段错误。