把usinged改成int就行了,因为如果len是unsigned类型的话,len-1是不会为负数的(因为类型限制),所以导致访问a越界
unsigned ,len = 0 时, 储存为:0000000000.。。。00(32个0,没有第一位表示正负)
int i = 0 时, 储存为10000.。。00(1个1表示正负,31个0代表值)
而len-1 的储存为 1111111.。。11(32个1)
但是这个储存,如果表达成int型时,值为:+ 2的31次方-1 = 2 147 483 647,
这个循环,将执行2 147 483 647次,而声名的a数组,长度是0,有2个可能:
1,传的a的地址不是空,但是访问超越了声明的数组长度,就会报错 内存错误……
2,传的a的地址为空,访问空地址,为报错内存错误。
你们学长说的是对的
当len = 0时 a[]为空 所以进入循环时执行result+=a[i]时访问了a[0]而显然a[0]是不存在的所以出现访问异常
应该在循环内部判断 避免len = 0时访问 a[0]
if(len ==0)
result = 0;
else
result += a[i];
因为len的类型是unsigned类型,只能表示整数,即使0-1得到的只能是下溢的结果还是正数