为什么`unsigned int`会导致程序崩溃?

时间:2016-03-16 20:28:56

标签: c++

我必须制作一个程序,通过排列字母来检查是否可以从另一个单词中获得两个单词。我在下面看到了编写代码,并且我花了很长时间才找出程序崩溃的原因,并且在某些时候我有想法从unsigned int更改这些变量的fundametal类型({{ 1}})到unsigned int code = 0, i, j, counter = 0, ok = 1;integer),现在它正常工作,但我不知道发生了什么变化,现在它可以正常工作。我知道(请纠正我,如果我错了)int code = 0, i, j, counter = 0, ok = 1;从0(包括0)变为非常大的数字。所有变量都没有低于0,所以我不知道为什么它在unsigned int版本中不起作用以及基本类型变化如何解决崩溃。

unsigned int

3 个答案:

答案 0 :(得分:3)

您的部分代码是:

while (i >= 0 && ok) { /* ...stuff here... */  --i; }

使用无符号,如果i为0并且递减它,它将成为最大无符号值。因此,i总是大于或等于0并且while循环继续执行。

我的猜测是正在发生的事情,然后,当你访问word [i]时,你正在访问数组范围之外并崩溃。

答案 1 :(得分:2)

问题可能来自以下代码:

for (j = strlen(word1) - 1; j >= 0; j--)

因为你把j定义为unsigned int,for循环永远都会继续,永远不会中断。

答案 2 :(得分:1)

初学者错误:考虑如果我是无符号整数,i> = 0将始终为真。这不可能是假的。如果将i设置为0然后减去1,则会得到一个非常大的正数。

如果你的编译器没有给你一个警告,请让别人告诉你如何打开更多警告。