永发信息网

这个c语言哪里错了?为什么呢?小白求详解

答案:6  悬赏:0  手机版
解决时间 2021-03-10 20:30
  • 提问者网友:雪舞兮
  • 2021-03-10 02:14
这个c语言哪里错了?为什么呢?小白求详解
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-03-10 02:56
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的地址为空,访问空地址,为报错内存错误。追问你好啊,为什么int型的时候,第一位表正负为什么是1,不是0?
全部回答
  • 1楼网友:酒者煙囻
  • 2021-03-10 07:21

当len = 0时  a[]为空 所以进入循环时执行result+=a[i]时访问了a[0]而显然a[0]是不存在的所以出现访问异常
应该在循环内部判断  避免len = 0时访问 a[0]if(len ==0)
  result = 0;
else 
  result += a[i];追问你好,我这边有个学长写的答案,看不太懂
  • 2楼网友:撞了怀
  • 2021-03-10 06:32
len值为0减1?
len值应设为数组的长度,即数组中元素的个数
  • 3楼网友:鱼忧
  • 2021-03-10 05:27

你们学长说的是对的
  • 4楼网友:迷人又混蛋
  • 2021-03-10 04:51
把usinged改成int就行了,因为如果len是unsigned类型的话,len-1是不会为负数的(因为类型限制),所以导致访问a越界
  • 5楼网友:蓝房子
  • 2021-03-10 03:41
因为len的类型是unsigned类型,只能表示整数,即使0-1得到的只能是下溢的结果还是正数
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯