单选题 下面的代码是一个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; //⑥
}
  • A.①
  • B.③
  • C.④
  • D.①或④
【正确答案】 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。