问题描述
|
void sortAlphabetically(int listLength,contactInfo* arrayOfStructs)
{
contactType temp;
for (int i = 0; i < listLength; i++)
{
if (strcmp(arrayOfStructs[i].contactName,arrayOfStructs[i+1].contactName) > 0)
{
temp = arrayOfStructs[i]; //swapping entire struct
arrayOfStructs[i] = arrayOfStructs[i+1];
arrayOfStructs[i+1] = temp;
}
}
}
解决方法
当
i == (listLength-1)
时,以下表达式无效(假设listLength
是arrayOfStructs
中元素数的计数):
arrayOfStructs[i+1]
,您应该最多迭代listLength - 1
,或者在引用arrayOfStructs[i+1]
之前检查您是否不在最后一个元素上。
,看来您正在索引数组的边界:
arrayOfStructs[i+1]
我假设listLength
是列表的长度,这意味着它比列表的最后一个元素多一个。您的条件为i < listLength
使i保持在范围之内,但不使i + 1处于范围之内。
这可能会或可能不会导致崩溃。
,我相信是因为以下几行:
arrayOfStructs[i] = arrayOfStructs[i+1];
arrayOfStructs[i+1] = temp;
更具体地说,“ 11”部分。如果您的for
循环从零运行到runs5 runs,则在最后一次迭代中,您将尝试访问超出实际范围的一个元素。
您可以使用i < listLength - 1
来解决问题,或者仅在循环内使用if
语句。更改条件可能是更好的做法。