单选题
下面的代码是一个C语言函数,用来计算两个长为len(len<1000)的数组a和数组b对应元素的和,结果保存在数组c中,其中c[i]=a[i]+b[i]。当len为0时,返回值应该是空数组,但在执行时,却提示“Runtime
Error:Segmentation fault”。后经检查是一个语句有误,修改后就正常执行了。这个语句可能是______。
double *sum_array (double A [], double B [], unsigned int len)
//①
{
int i;
//②
double C [1000];
//③
for (i=0; i<=len-1; i++)
//④
C[i]=A[i]+B[i];
//⑤
return C;
//⑥
}
【正确答案】
D
【答案解析】[解析] Segmentation fault,段错误就是访问了错误的内存段,一般是用户没有权限,或者根本就不存在对应的物理内存。内存访问异常是由于对数组A,B访问时产生了越界错误而造成的。循环变量是int型的,而len是unsigned int型,当len为0时,执行len-1的结果为FFFF FFFF,是最大的可表示的32位无符号数,任何无符号数都比它小,使得数组越界访问,因而发生Segmentation fault。
可以通过修改参数len的声明为int型,就能避免这一错误。
也可以将for(i=0; i<=len-1; i++)中的i<=len-1改为i<len,也能避免发生在len为0时,进入循环体。
综上,正确答案为D。