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;
}
}
}
答案 0 :(得分:2)
以下表达式在i == (listLength-1)
时无效(假设listLength
是arrayOfStructs
中元素数量的计数):
arrayOfStructs[i+1]
答案 1 :(得分:1)
您应该只迭代listLength - 1
,或者在引用arrayOfStructs[i+1]
之前检查您是否在最后一个元素。
答案 2 :(得分:1)
看起来你正在索引数组的边界:
arrayOfStructs[i+1]
我假设listLength
是列表的长度,这意味着它比列表的最后一个元素多一个。你的条件为i < listLength
使我保持在界限内,但不是i + 1.
可能会或可能不会导致崩溃。
答案 3 :(得分:0)
我相信这是因为以下几行:
arrayOfStructs[i] = arrayOfStructs[i+1];
arrayOfStructs[i+1] = temp;
更具体地说,i+1
部分。如果您的for
循环从零到listLength - 1
,则在最后一次迭代中,您将尝试访问超出实际范围的一个元素。
您可以使用i < listLength - 1
来解决问题,或者只在循环中使用if
语句。改变病情可能是更好的做法。