为什么这个循环导致溢出错误?

时间:2012-03-04 08:40:44

标签: c++ loops overflow

这个循环应该添加两个数字,这些数字按照各自的数字存储在向量中。因此,例如leftc将包含[10] {0,9,0,0,0,0,0,0,5,7}并且rightc将包含 [10] {0,0,0,0,0,0,0,0,9,9,6}并且在循环结束时number应包含“0900000153”(前导零被删除程序)。它完美地工作,直到它达到index = 0然后它会导致溢出错误,但我无法弄清楚原因。

string number;                                                      // accumulates the result of the addition
int num;                                                            // holds the result of adding corresponding elements
short carry = 1;

for ( size_t index = leftc.size() - 1; index >= 0; index-- )        // start from the end of the vectors and work toward the beginning
{
    num = leftc.at(index) + rightc.at(index);                       // add the two elements and store in num
    if ( num >= 10 )
    {
        num %= 10;
        leftc.at(index - 1) += carry;
    }
    num += '0';                                                     // convert num from int to char                                             
    number.insert( number.begin(), num );                           // store num at front of number
}

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:3)

你这里有问题

for ( size_t index = leftc.size() - 1; index >= 0; index-- ) 

由于size_t未签名,index 总是>=0

答案 1 :(得分:1)

当您的index为0时,您的(index-1)将为-1 ...因此会出现溢出错误...因为您正尝试访问索引为“-1”的项目。< / p>

答案 2 :(得分:0)

if ( num >= 10 )
{
    num %= 10;
    leftc.at(index - 1) += carry;
}

在这里,如果index为零,则会出现错误 - 您访问第(-1)个元素。