我遇到一个问题,一个整数意外地回绕到它的最小值。
在包装到-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传递给当前方法。
为什么会发生这种情况?
答案 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'是指向数组的指针吗?