当长度== 0时,为什么这种练习代码会失败?

时间:2013-10-01 03:50:57

标签: c

嗨,我有这本书带有练习题,我无法回答。不,这不是一个功课问题。这是我从一本推荐给我的书中的自学:“计算机系统,程序员的观点”

以下是问题: enter image description here

感谢任何帮助!

2 个答案:

答案 0 :(得分:11)

length是未签名的,因此如果您为该参数传递0,则length - 1将为UINT_MAX,而不是-1,就像您希望的那样;因此循环将运行,你将使a的大小超出范围。

答案 1 :(得分:1)

更改此unsigned length to int length代码将完美运行

而为什么上面的代码不起作用

当你使用无符号长度时,如果你将0传递给长度,那么在循环中你有(length - 1)这是循环范围并且它取最大值因此循环得到分段错误