意外的整数换行

时间:2011-03-14 06:20:32

标签: c++ integer

我遇到一个问题,一个整数意外地回绕到它的最小值。

在包装到-858993460之前,整数的值是15。

Here是导致此问题的代码:

while(ArrayLocation2 < EmpArray2Size)
{
    GivenEmployees[(*EmployeeSize++)] = curr2;

    prev2 = curr2;
    if(ArrayLocation2 < EmpArray2Size)
    {
        curr1 = EmpArray2[ArrayLocation2];
    }
    ArrayLocation2++;

    if((ArrayLocation2 >= EmpArray2Size) || (prev2.HourlyRate > curr2.HourlyRate))
    {
        subFiles++;
    }
}

如果我手动更改所需的值(16,17,18等),它会按预期工作。

大小声明为int Size = 21;,如果有所不同,则会将其作为&amp; Size传递给当前方法。

为什么会发生这种情况?

3 个答案:

答案 0 :(得分:3)

问题是你正在递增指针 - 它最终指向随机区域。

您可能打算写:

GivenEmployees[(*EmployeeSize)++] = cur2;

括号在这里是必要的;它们在原文中是不必要的。


来自评论:

  

包装的整数是“EmployeeSize”,并且声明为我在OP中描述的。

(除了它在原始OP中被称为'大小'。)然而,它似乎是:

void this_function(..., int *EmployeeSize, ...)
{
    ...code...
}

答案 1 :(得分:2)

表达式*EmployeeSize++返回EmployeeSize指向的值,然后递增指针,而不是指向的项目。试试(*EmployeeSize)++

答案 2 :(得分:1)

GivenEmployees[(*EmployeeSize++)]
闻起来很麻烦。它被解析为

GivenEmployees[(*(EmployeeSize++))]

Postfix增量优先于解除引用。 因此,您递增指针然后取消引用它。 'EmployeeSize'是指向数组的指针吗?